Sintaxe do for-loop no servidor SQL

Qual é a sintaxe de um laço for em TSQL?

Author: Somnath Muluk, 2011-05-20

8 answers

O T-SQL não tem um laço FOR, tem um laço WHILE
WHILE (Transact-SQL)

WHILE Boolean_expression
BEGIN

END
 171
Author: jams, 2017-09-19 12:38:19

Não há for-loop, apenas o while-loop:

DECLARE @i int = 0

WHILE @i < 20
BEGIN
    SET @i = @i + 1
    /* do some work */
END
 312
Author: 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
Author: kashmir, 2014-05-07 08:50:07
Que tal isto:
BEGIN
   Do Something
END
GO 10

... claro que você poderia colocar um contador incremental dentro dele se você precisar contar.

 7
Author: i00, 2017-08-28 17:27:02

Informação Extra

Só para adicionar como ninguém postou uma resposta que inclui como realmente iterar através de um conjunto de dados dentro de um loop, você pode usar as palavras-chave OFFSET FETCH .

Utilização

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
Author: Dan Cundy, 2018-06-15 07:54:13
A resposta simples é:NO !!.

Não Há FOR em SQL, Mas você pode usar WHILE ou GOTO para atingir a forma como o FOR vai funcionar.

Enquanto :

DECLARE @a INT = 10

WHILE @a <= 20
BEGIN
    PRINT @a
    SET @a = @a + 1
END

IR :

DECLARE @a INT = 10
a:
PRINT @a
SET @a = @a + 1
IF @a < = 20
BEGIN
    GOTO a
END
Eu sempre prefiro WHILE terminado.GOTO declaração.
 6
Author: Ragul, 2015-12-22 07:39:35

For loop is not officially supported yet by SQL server. Já existe Resposta sobre alcançar para Loop de maneiras diferentes. Estou detalhando resposta sobre maneiras de alcançar diferentes tipos de loops no servidor SQL.

Para o ciclo

DECLARE @cnt INT = 0;

WHILE @cnt < 10
BEGIN
   PRINT 'Inside FOR LOOP';
   SET @cnt = @cnt + 1;
END;

PRINT 'Done FOR LOOP';

Se você sabe, você precisa completar a primeira iteração de loop de qualquer maneira, então você pode tentar fazer..Enquanto ou repetem..Até versão do servidor SQL.

Faz..While Loop
DECLARE @X INT=1;

WAY:  --> Here the  DO statement

  PRINT @X;

  SET @X += 1;

IF @X<=10 GOTO WAY;
Repito..ATE Loop
DECLARE @X INT = 1;

WAY:  -- Here the REPEAT statement

  PRINT @X;

  SET @X += 1;

IFNOT(@X > 10) GOTO WAY;

Referência

 5
Author: Somnath Muluk, 2017-09-22 11:08:51

Enquanto o exemplo do ciclo em T-SQL indica a data do início do mês actual para o fim.

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
Author: Sameer, 2018-05-21 08:54:38