Quelle est la syntaxe d'une boucle for
en SQL?
T-SQL n'a pas de boucle FOR
, il a une boucle WHILE
WHILE (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
Pour ajouter que personne n’a posté de réponse indiquant comment itérer réellement dans un jeu de données au sein d’une boucle, vous pouvez utiliser les mots-clés OFFSET FETCH .
Usage
DECLARE @i INT = 0;
SELECT @count= Count(*) FROM TABLE
WHILE @i <= @count
BEGIN
SELECT * FROM TABLE
ORDER BY COLUMN
OFFSET @i ROWS
FETCH NEXT 1 ROWS ONLY
SET @i = @i + 1;
END
Que dis-tu de ça:
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.
La boucle For n'est pas encore officiellement supportée par le serveur SQL. Il y a déjà réponse sur la réalisation de POUR DIFFÉRENTES MANIÈRES DE Loop. Je détaille la réponse sur les moyens de réaliser différents types de boucles dans SQL Server.
DECLARE @cnt INT = 0;
WHILE @cnt < 10
BEGIN
PRINT 'Inside FOR LOOP';
SET @cnt = @cnt + 1;
END;
PRINT 'Done FOR LOOP';
Si vous savez, vous devez quand même terminer la première itération de la boucle, vous pouvez alors essayer DO..WHILE ou REPEAT..UNTIL version du serveur SQL.
DECLARE @X INT=1;
WAY: --> Here the DO statement
PRINT @X;
SET @X += 1;
IF @X<=10 GOTO WAY;
DECLARE @X INT = 1;
WAY: -- Here the REPEAT statement
PRINT @X;
SET @X += 1;
IFNOT(@X > 10) GOTO WAY;
La réponse simple est NO !!
.
Il n'y a pas
FOR
en SQL, mais vous pouvez utiliserWHILE
ouGOTO
pour obtenir le fonctionnement normal deFOR
.
WHILE:
_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
.
Exemple de boucle While dans T-SQL, qui répertorie la date de début à la 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;