Parcourir les lignes dans SQL Server 2008
Considérer la table de l'ÉCHANTILLON:
id integer
name nvarchar(10)
Il y a une procédure stockée appelée myproc
. Il suffit d'une seule paramater ( qui est id)
Donné un nom de paramètre, de trouver toutes les lignes avec la name = @nameparameter
et passer de tous ces identifiants
pour myproc
par exemple:
sample->
1 mark
2 mark
3 stu
41 mark
Quand mark
est passé, 1 ,2 and 41
sont à transmettre à myproc
individuellement.
c'est à dire la suite devrait se produire:
execute myproc 1
execute myproc 2
execute myproc 41
Je ne peux pas toucher myproc
ni voir son contenu. Je viens de passer les valeurs.
- Bien que cela peut être fait, il vaut mieux éviter, généralement par la conversion de la procédure stockée dans un fichier UDF, ou de l'élargir à la volée, de sorte qu'un ensemble de base de fonctionnement peut être effectuée. Nous aurions besoin de voir le fonctionnement interne de
myproc
conseiller qui était possible dans ce cas. En SQL, vous devez généralement chercher ensemble des solutions aux problèmes, pas de boucle de base. - Simialr réponse à votre Question ici, stackoverflow.com/questions/20662356/...
- ceci est une ancienne question et j'ai accepté la solution
Vous devez vous connecter pour publier un commentaire.
Si vous doit iterate(*), utilisez la construction conçu pour le faire - la curseur. Décrié, mais si elle exprime le plus clairement vos intentions, je dis l'utiliser:
(*) Cette réponse a reçu un peu d'upvotes récemment, mais j'ai l'impression que je devrais intégrer mon premier commentaire ici aussi, et ajouter quelques conseils généraux:
En SQL, vous devez généralement chercher une solution à base d'. Toute la langue est orientée autour de, basés sur les solutions, et (en retour) l'optimiseur est orientée autour de décisions basées sur des solutions fonctionnent bien. En plus de tourner, les outils dont nous disposons pour tuning l'optimiseur est également orientée sur un ensemble - par exemple, l'application des indices de tableaux.
Il y a un quelques les situations où l'itération est la meilleure approche. Ces sont quelques-unes sont très espacées, et peut être comparée à Jackson règles d'optimisation, - ne pas le faire - et (pour les experts seulement) ne pas le faire encore.
Vous êtes beaucoup mieux servis d'abord essayer de formuler ce que vous voulez en termes de l'ensemble de toutes les lignes concernées - qu'est-ce que le changement global à atteindre? - et puis essayer de formuler une requête qui encapsule cet objectif. Seulement si la requête produite par le faire ne fonctionne pas de manière adéquate (ou il ya quelques autres composants qui est incapable de faire autre chose que de traiter chaque ligne individuellement) devrait vous envisager itération.
Je viens de déclarer la table temporaire @échantillon et insérez le toutes les lignes qui ont le nom= "rahul" et de prendre le statut de la colonne pour vérifier que la ligne est itérée.et l'utilisation de la boucle while je itérer sur l'ensemble des lignes de la table temporaire @échantillon qui ont tous les id de nom='rahul'