Syntaxe de For-loop dans SQL Server
8 réponses
T-SQL n'a pas de boucle FOR
, Il a une boucle WHILE
alors que (Transact-SQL)
WHILE Boolean_expression
BEGIN
END
Il n'y a pas de boucle for, seulement la boucle while:
DECLARE @i int = 0
WHILE @i < 20
BEGIN
SET @i = @i + 1
/* do some work */
END
DECLARE @intFlag INT
SET @intFlag = 1
WHILE (@intFlag <=5)
BEGIN
PRINT @intFlag
SET @intFlag = @intFlag + 1
END
GO
Que diriez-vous de ceci:
BEGIN
Do Something
END
GO 10
... bien sûr, vous pouvez mettre un compteur incrémental à l'intérieur si vous avez besoin de compter.
Informations Supplémentaires
Juste pour ajouter comme personne n'a posté une réponse qui inclut comment itérer réellement un ensemble de données dans une boucle, vous pouvez utiliser les mots-clés OFFSET FETCH .
Utilisation
DECLARE @i INT = 0;
SELECT @total = Count(*) FROM DATASET
WHILE @i < @total
BEGIN
SELECT * FROM TABLE
ORDER BY COLUMN
OFFSET @i ROWS
FETCH NEXT 1 ROWS ONLY
SET @i = @i + 1;
END
La réponse Simple est NO !!
.
Il n'y a pas de
FOR
en SQL, Mais vous pouvez utiliserWHILE
ouGOTO
pour atteindre la façon dont leFOR
fonctionnera.
Alors que:
DECLARE @a INT = 10
WHILE @a <= 20
BEGIN
PRINT @a
SET @a = @a + 1
END
GOTO :
DECLARE @a INT = 10
a:
PRINT @a
SET @a = @a + 1
IF @a < = 20
BEGIN
GOTO a
END
, je préfère toujours WHILE
plus GOTO
l'énoncé.
Pour la boucle n'est pas encore officiellement pris en charge par SQL server. Il y a déjà answer sur la réalisation de pour les différentes manières de la boucle. 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 < 10
BEGIN
PRINT 'Inside FOR LOOP';
SET @cnt = @cnt + 1;
END;
PRINT 'Done FOR LOOP';
Si vous le savez, vous devez terminer la première itération de la boucle de toute façon, alors vous pouvez essayer Faire..Alors que ou répéter..JUSQU'à la version de SQL server.
Faites..Boucle WHILE
DECLARE @X INT=1;
WAY: --> Here the DO statement
PRINT @X;
SET @X += 1;
IF @X<=10 GOTO WAY;
Répéter..JUSQU' Boucle
DECLARE @X INT = 1;
WAY: -- Here the REPEAT statement
PRINT @X;
SET @X += 1;
IFNOT(@X > 10) GOTO WAY;
While exemple de boucle dans T-SQL qui liste la date de début à fin du mois en cours.
DECLARE @Today DATE= GETDATE() ,
@StartOfMonth DATE ,
@EndOfMonth DATE;
DECLARE @DateList TABLE ( DateLabel VARCHAR(10) );
SET @EndOfMonth = EOMONTH(GETDATE());
SET @StartOfMonth = DATEFROMPARTS(YEAR(@Today), MONTH(@Today), 1);
WHILE @StartOfMonth <= @EndOfMonth
BEGIN
INSERT INTO @DateList
VALUES ( @StartOfMonth );
SET @StartOfMonth = DATEADD(DAY, 1, @StartOfMonth);
END;
SELECT DateLabel
FROM @DateList;