SQL est un langage très différent de celui auquel vous êtes habitué. Il se concentre sur quoi , pas sur comment . Vous indiquez à SQL Server les résultats que vous souhaitez et laissez-le déterminer comment produire la réponse. Ou, pour reprendre ce que je viens de dire - il n'y a pas de boucle for dans SQL.
Damien_The_Unbeliever
5
WHILE @I < 10; SET @I = @I + 1; BEGIN; ...; END? Cependant, cela ne doit pas être utilisé pour la plupart des traitements de requêtes (mais est parfois requis pour une manipulation impérative). Beaucoup de ces instructions / astuces sont disponibles sur Google en utilisant la recherche "tsql for loop".
7
Évitez les boucles en faveur des JOIN et définissez les opérations.
Odé
2
Si vous n'êtes pas expert en SQL, vous ne devriez pas envisager d'utiliser une boucle. Il n'y a que quelques conditions où une seule est nécessaire et la plupart du temps, utiliser une boucle équivaut à pousser votre voiture au lieu de la conduire. Apprenez à penser en termes d'ensembles de données au lieu de parcourir les enregistrements. La boucle est une fonction de niveau expert non pas parce que la syntaxe est difficile mais parce que vous devez savoir exactement combien de mal vous pouvez en faire avant de pouvoir l'utiliser.
HLGEM
2
Parfois, il pourrait être utilisé pour faire apparaître rapidement des données de test dans une base de données de test que vous allez simplement supprimer peu de temps après. Dans ce cas, l'utilisation de ceci supprime la nécessité de passer par un programme séparé écrit en quelque chose de plus comme C #, et l'ingénierie n'est pas particulièrement une préoccupation majeure. Encore une fois, je dis simplement cela en termes de données de test.
Les JOIN (et les opérations de définition) doivent être préférés aux constructions en boucle en SQL.
Odé
6
Il n'y a pas de limite pour souligner (en particulier pour ceux qui sont nouveaux dans SQL), ce que Damien a dit: "SQL est un langage très différent de ce à quoi vous êtes habitué. Il est concentré sur quoi, pas comment. Vous dites à SQL Server ce que résultats que vous voulez, et laissez-le trouver comment produire la réponse. "
ypercubeᵀᴹ
1
Il est intéressant de noter que la documentation MS est incorrecte ici, vraiment. TANT QUE ne prend pas une expression booléenne - il faut un prédicat - qui en plus de pouvoir évaluer VRAI ou FAUX, pourrait également être INCONNU.
Damien_The_Unbeliever
360
Il n'y a pas de boucle for, seulement la boucle while:
DECLARE@i int =0WHILE@i <20BEGINSET@i =@i +1/* do some work */END
Sachez que si vous avez l'intention d'utiliser l'index dans la boucle, vous souhaiterez peut-être incrémenter la dernière chose au lieu de la première, selon votre cas d'utilisation.
jinglesthula
3
Notez également que la valeur par défaut de la variable locale n'est pas prise en charge dans SQL brut. Par conséquent, vous devez séparer SET @i = 0avant la boucle.
Nux
1
@Nux: le 0 est défini explicitement lors de la déclaration
TcKs
7
Oui, mais cela ne fonctionne pas sur les anciens serveurs SQL (du moins pas en 2005).
Nux
En outre, il convient de noter que généralement le travail est effectué avant que l'entier ne soit incrémenté. Beaucoup de boucles for dans SQL utilisent réellement cet entier dans leur travail (itération de ligne en ligne ou résultat pour aboutir à des tables temporaires) et peuvent être supprimées si l'incrément se produit au début du cycle plutôt qu'à la fin.
CSS
34
Informaitons supplémentaires
Juste pour ajouter que personne n'a posté une réponse qui comprend comment itérer réellement à travers un ensemble de données dans une boucle, vous pouvez utiliser les mots clés OFFSET FETCH .
Usage
DECLARE@i INT =0;SELECT@count= Count(*)FROM{TABLE}WHILE@i <=@count
BEGINSELECT*FROM{TABLE}ORDERBY{COLUMN}
OFFSET @i ROWSFETCH NEXT 1ROWS ONLY
SET@i =@i +1;END
Bienvenue dans Stack Overflow! Envisageriez-vous d'ajouter un récit pour expliquer pourquoi ce code fonctionne et ce qui en fait une réponse à la question? Ce serait très utile à la personne qui pose la question et à toute autre personne qui vient.
Andrew Barber
18
Cela va de soi.
Edward Olamisan du
4
Comment cela ne s'explique-t-il pas? J'avais la même question, j'ai tout de suite compris la réponse.
DanteTheSmith
1
En quoi cette réponse diffère-t-elle de @TcKs, à l'exception de la convention de dénomination?
Sushil Jadhav
7
Que dis-tu de ça:
BEGIN
Do Something
END
GO 10
... bien sûr, vous pouvez y mettre un compteur incrémentiel si vous avez besoin de compter.
La boucle For n'est pas encore officiellement prise en charge par SQL Server. Il existe déjà une réponse sur la réalisation des différentes manières de FOR Loop. Je détaille la réponse sur les moyens de réaliser différents types de boucles dans SQL Server.
POUR boucle
DECLARE@cnt INT =0;WHILE@cnt <10BEGINPRINT'Inside FOR LOOP';SET@cnt =@cnt +1;END;PRINT'Done FOR LOOP';
Si vous savez, vous devez de toute façon terminer la première itération de la boucle, vous pouvez alors essayer la version DO..WHILE ou REPEAT..UNTIL du serveur SQL.
DO..WHILE Loop
DECLARE@X INT=1;
WAY:--> Here the DO statementPRINT@X;SET@X +=1;IF@X<=10GOTO WAY;
REPEAT..UNTIL Loop
DECLARE@X INT =1;
WAY:-- Here the REPEAT statementPRINT@X;SET@X +=1;
IFNOT(@X >10)GOTO WAY;
WHILE @I < 10; SET @I = @I + 1; BEGIN; ...; END
? Cependant, cela ne doit pas être utilisé pour la plupart des traitements de requêtes (mais est parfois requis pour une manipulation impérative). Beaucoup de ces instructions / astuces sont disponibles sur Google en utilisant la recherche "tsql for loop".Réponses:
T-SQL n'a pas de
FOR
boucle, il a uneWHILE
boucleWHILE (Transact-SQL)
la source
Il n'y a pas de boucle for, seulement la boucle while:
la source
SET @i = 0
avant la boucle.Informaitons supplémentaires
Juste pour ajouter que personne n'a posté une réponse qui comprend comment itérer réellement à travers un ensemble de données dans une boucle, vous pouvez utiliser les mots clés OFFSET FETCH .
Usage
la source
la source
Que dis-tu de ça:
... bien sûr, vous pouvez y mettre un compteur incrémentiel si vous avez besoin de compter.
la source
La boucle For n'est pas encore officiellement prise en charge par SQL Server. Il existe déjà une réponse sur la réalisation des différentes manières de FOR Loop. Je détaille la réponse sur les moyens de réaliser différents types de boucles dans SQL Server.
POUR boucle
Si vous savez, vous devez de toute façon terminer la première itération de la boucle, vous pouvez alors essayer la version DO..WHILE ou REPEAT..UNTIL du serveur SQL.
DO..WHILE Loop
REPEAT..UNTIL Loop
Référence
la source
La réponse est simple
NO !!
.TANDIS QUE :
ALLER À :
Je préfère toujours
WHILE
laGOTO
déclaration.la source
Exemple de boucle While dans T-SQL qui répertorie la date de début à la fin du mois en cours.
la source
Essayez-le, apprenez-le:
Avec date:
la source