Parcourir toutes les lignes d'une table temporaire et appeler une procédure stockée pour chaque ligne
J'ai déclaré une table temporaire pour contenir toutes les valeurs nécessaires, comme suit:
DECLARE @temp TABLE
(
Password int,
IdTran int,
Kind varchar(16)
)
INSERT INTO @temp
SELECT s.Password, s.IdTran, 'test'
from signal s inner join vefify v
on s.Password = v.Password
and s.IdTran = v.IdTran
and v.type = 'DEV'
where s.[Type] = 'start'
AND NOT EXISTS (SELECT * FROM signal s2
WHERE s.Password = s2.Password
and s.IdTran = s2.IdTran
and s2.[Type] = 'progress' )
INSERT INTO @temp
SELECT s.Password, s.IdTran, 'test'
from signal s inner join vefify v
on s.Password = v.Password
and s.IdTran = v.IdTran
and v.type = 'PROD'
where s.[Type] = 'progress'
AND NOT EXISTS (SELECT * FROM signal s2
WHERE s.Password = s2.Password
and s.IdTran = s2.IdTran
and s2.[Type] = 'finish' )
Maintenant, j'ai besoin d'une boucle sur les lignes de la @temp de table et de et pour chaque ligne d'appel d'un sp qui prend tous les paramètres de @temp table en entrée.
Comment puis-je y parvenir?
- Est-ce que votre proc retourner plusieurs ou une seule ligne pour chaque valeur de @table temp. si proc retourne une seule ligne/valeur je condider réécriture présent à l'appel de la fonction. De cette façon, vous pouvez exécuter pour chaque valeur de la table sans
cursors
=CURSES
ouLOOPS
. SQL est destinée à faire définir le traitement à base de pas de boucles. La plupart des gens dans la communauté permettra d'éviter tout ce qui est aveccursors
c'est vraiment uncurse
Vous devez vous connecter pour publier un commentaire.
vous pouvez utiliser un curseur:
Essayer de retourner le jeu de données à partir de votre procédure stockée pour votre table de données en C# ou VB.Net. Puis la grande quantité de données dans votre datatable peut être copié sur votre table de destination à l'aide d'une Copie en bloc. J'ai utilisé BulkCopy pour le chargement des grandes tables de données avec des milliers de lignes dans les tables Sql avec un grand succès en termes de performances.
Vous voudrez peut-être essayer avec BulkCopy dans votre C# ou VB.Net code.
quelque chose comme cela?
Vous pouvez faire quelque chose comme ceci
Vous toujours n'avez pas besoin d'un curseur pour cela. Vous pouvez le faire avec une boucle while. Vous devriez éviter les curseurs chaque fois que possible. Tandis que la boucle est plus rapide que les curseurs.