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;
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 oWHILE
ouGOTO
para obter o modo como oFOR
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