2010-04-26 4 views
0

Je voudrais savoir comment passer un tableau à une procédure stockée qui retourne à son tour un tableau de C# .net?Comment passer et retourner un tableau à la procédure stockée?

+1

Quelle est la taille de votre baie? (nombre d'entrées et empreinte mémoire) – lexu

+2

.. et quels SGBD utilisez-vous! – lexu

+0

duplicata possible de http://stackoverflow.com/questions/1069311/passing-an-array-of-parameters-to-stored-procedure –

Répondre

4

Il existe différentes options selon le scénario. J'utilise SQL Server pour beaucoup des exemples ci-dessous, mais une grande partie est largement transférable entre les systèmes. Pour un tableau relativement petit (idéalement un vecteur), vous pouvez construire une chaîne délimitée (délimitée par des tabulations, délimitée par des virgules, etc.) et la passer dans votre DB et analyser - généralement manuellement (les DBMS manquent souvent de routine "split") , mais il est très facile d'obtenir une implémentation "split" pré-écrite (par exemple, en tant que UDF dans SQL Server). Utilisation typique:

SELECT st.* 
FROM dbo.SplitUDF(@myarg) #udf 
INNER JOIN SOME_TABLE st ON st.ID = #udf.Value 

Xml est une autre option, en particulier pour les données complexes; SQL Server 2005 et versions ultérieures ont intégré l'analyse XML, mais cela ne devrait pas être supposé en général.

Table-valued parameters sont une autre option, mais il s'agit uniquement de SQL Server 2008 - il se pourrait bien que ce soit ce que vous recherchez.

Une autre option, en particulier pour les grandes quantités de données, est de pomper les données dans le serveur séparément (insert en vrac, SQLBulkCopy, « bcp », SSIS peu importe) et traiter les données via SQL une fois qu'il est là.

Pour obtenir des données tableau/tableau, un SELECT standard devrait être votre option par défaut, bien que vous puissiez bien sûr aussi construire des données de caractères xml ou délimitées. Ce dernier peut être accompli via un caprice de SQL:

DECLARE @foo varchar(max) 
SET @foo = '' 
SELECT @foo = @foo + st.SomeColumn + '|' -- pipe-delimited, note trailing | 
FROM SOME_TABLE st 
Questions connexes