Syntaxe de For-loop dans SQL Server

Quelle est la syntaxe d'une boucle for dans TSQL?

187
demandé sur Somnath Muluk 2011-05-20 11:55:22

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
171
répondu jams 2017-09-19 12:38:19

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
312
répondu TcKs 2016-02-09 15:06:04

DECLARE @intFlag INT
SET @intFlag = 1
WHILE (@intFlag <=5) 
BEGIN
    PRINT @intFlag
    SET @intFlag = @intFlag + 1
END
GO
26
répondu kashmir 2014-05-07 08:50:07

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.

7
répondu i00 2017-08-28 17:27:02

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
7
répondu Dan Cundy 2018-06-15 07:54:13

La réponse Simple est NO !!.

Il n'y a pas de FOR en SQL, Mais vous pouvez utiliser WHILE ou GOTO pour atteindre la façon dont le FOR 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é.

6
répondu Ragul 2015-12-22 07:39:35

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;

Référence

5
répondu Somnath Muluk 2017-09-22 11:08:51

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;  
0
répondu Sameer 2018-05-21 08:54:38