2010-10-05 4 views

Répondre

2

Il semble que vous pouvez faire cela avec SQL Server 2008 ou plus récent (au moins avec un DataTable). Voici les liens:

http://www.eggheadcafe.com/community/aspnet/10/10138579/passing-dataset-to-stored-procedure.aspx

http://www.sqlteam.com/article/sql-server-2008-table-valued-parameters

+0

Un espoir pour SQL Server 2005? –

+0

Vous pouvez le pirater en sérialisant votre DataSet en XML (en utilisant sa méthode 'WriteXml'), puis en passant le XML en tant que paramètre de chaîne. Cela signifie que vous devez effectuer un traitement XML dans votre proc stocké. – MusiGenesis

0

Comme le article de la réponse de MusiGenesis États

Dans SQL Server 2005 et les versions antérieures, il est pas possible de passer d'une table des variables en tant que paramètre à une procédure stockée. Lorsque plusieurs lignes de données à SQL Server doivent envoyer plusieurs lignes de données SQL Server, les développeurs avaient soit d'envoyer une ligne à un moment ou se avec d'autres solutions de contournement pour répondre exigences. Alors qu'un développeur VB.Net m'a récemment informé qu'il existe un objet SQLBulkCopy disponible en .Net pour envoyer plusieurs lignes de données à SQL Server à la fois, les données ne peuvent toujours pas être transmis à un proc stocké.

Au risque de dire évident ici sont deux autres approches

Paramétrer votre procédure de traitement

Vous pourriez réévaluer si vous avez vraiment besoin et vraiment passer une variable de tableau général. Bien que parfois cela ne puisse pas être évité, la raison pour laquelle il s'agit d'un ajout ultérieur à l'ensemble des fonctionnalités de MS SQL Server est partiellement parce que vous pouvez généralement contourner cela en structurant vos procédures stockées et le flux de vos données.

Si vous pouvez «paramétrer» votre processus, vous devriez être en mesure de laisser les procédures stockées récupérer l'ensemble de données complet en fonction d'un nombre limité de paramètres. Cela rendra le processus moins flexible, mais le rendra également plus contrôlé, ce qui n'est pas une mauvaise chose (de même que la base de données qui interfère avec les applications uniquement au niveau des procédures stockées est plus robuste, cette approche aussi , en limitant la flexibilité réduit le nombre de cas possibles et, par conséquent, le nombre de cas éventuellement non manipulés.lire: failles de sécurité et bugs généraux)

tables Temp

Outre ce qui précède, il y a Abordez toujours avec des tables temporaires, qui peuvent être plus ou moins complexe, selon la portée du partage que vous avez besoin sur les données (le partage peut se faire entre utilisateurs db, utilisateurs d'applications, connexions, processus, etc.).

Un bon effet secondaire est qu'une telle approche permettrait la persistance du processus (ce qui vous rapproche de l'annulation, du rétablissement et de la capacité de continuer le travail interrompu).