Sintaxe do for-loop no servidor SQL
Qual é a sintaxe de um laço for
em TSQL?
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
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
DECLARE @intFlag INT
SET @intFlag = 1
WHILE (@intFlag <=5)
BEGIN
PRINT @intFlag
SET @intFlag = @intFlag + 1
END
GO
BEGIN
Do Something
END
GO 10
... claro que você poderia colocar um contador incremental dentro dele se você precisar contar.
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
NO !!
.
Não Há
FOR
em SQL, Mas você pode usarWHILE
ouGOTO
para atingir a forma como oFOR
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.
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 LoopDECLARE @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;
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;