web-dev-qa-db-fra.com

Syntaxe de for-loop dans SQL Server

Quelle est la syntaxe d'une boucle for en SQL?

214
Macho

T-SQL n'a pas de boucle FOR, il a une boucle WHILE
WHILE (Transact-SQL)

WHILE Boolean_expression
BEGIN

END
194
jams

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
340
TcKs
DECLARE @intFlag INT
SET @intFlag = 1
WHILE (@intFlag <=5) 
BEGIN
    PRINT @intFlag
    SET @intFlag = @intFlag + 1
END
GO
27
kashmir

Informaitons supplémentaires

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
25
Dan Cundy

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.

7
i00

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.

FOR Loop

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.

DO..WHILE Loop

DECLARE @X INT=1;

WAY:  --> Here the  DO statement

  PRINT @X;

  SET @X += 1;

IF @X<=10 GOTO WAY;

Boucle REPEAT..UNTIL

DECLARE @X INT = 1;

WAY:  -- Here the REPEAT statement

  PRINT @X;

  SET @X += 1;

IFNOT(@X > 10) GOTO WAY;

référence

7
Somnath Muluk

La réponse simple est NO !!.

Il n'y a pas FOR en SQL, mais vous pouvez utiliser WHILE ou GOTO pour obtenir le fonctionnement normal de FOR.

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.

6
Ragul

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;  
0
Sameer