statement - Sintaxe de for-loop no SQL Server




using for sql server (6)

Informação extra

Apenas para adicionar, pois ninguém postou uma resposta que inclua como realmente iterar um conjunto de dados dentro de um loop, você pode usar as palavras-chave OFFSET FETCH .

Uso

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

Qual é a sintaxe de um loop for no TSQL?


For loop não é oficialmente suportado ainda pelo SQL Server. Já existe answer em alcançar as diferentes formas do FOR Loop. Eu estou detalhando a resposta sobre maneiras de obter diferentes tipos de loops no 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';

Se você sabe, você precisa completar a primeira iteração do loop de qualquer maneira, então você pode tentar a versão DO..WHILE ou REPEAT..UNTIL do SQL Server.

DO..WHILE Loop

DECLARE @X INT=1;

WAY:  --> Here the  DO statement

  PRINT @X;

  SET @X += 1;

IF @X<=10 GOTO WAY;

REPEAT..UNTIL Loop

DECLARE @X INT = 1;

WAY:  -- Here the REPEAT statement

  PRINT @X;

  SET @X += 1;

IFNOT(@X > 10) GOTO WAY;

Reference


Que tal agora:

BEGIN
   Do Something
END
GO 10

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


Resposta simples é NO !! .

Não há FOR em SQL, mas você pode usar o WHILE ou GOTO para obter o modo como o FOR funcionará.

ENQUANTO :

DECLARE @a INT = 10

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

VAMOS PARA :

DECLARE @a INT = 10
a:
PRINT @a
SET @a = @a + 1
IF @a < = 20
BEGIN
    GOTO a
END

Eu sempre prefiro o comando WHILE over GOTO .


While Loop example in T-SQL que lista a data de início até a data final do mês atual.

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;  

DECLARE @intFlag INT
SET @intFlag = 1
WHILE (@intFlag <=5) 
BEGIN
    PRINT @intFlag
    SET @intFlag = @intFlag + 1
END
GO




syntax