Каков синтаксис цикла for
в TSQL?
Синтаксис for-loop в SQL Server
Ответ 1
T-SQL не имеет цикла FOR
, он имеет цикл WHILE
WHILE (Transact-SQL)
WHILE Boolean_expression
BEGIN
END
Ответ 2
Нет цикла for-loop, только while-loop:
DECLARE @i int = 0
WHILE @i < 20
BEGIN
SET @i = @i + 1
/* do some work */
END
Ответ 3
DECLARE @intFlag INT
SET @intFlag = 1
WHILE (@intFlag <=5)
BEGIN
PRINT @intFlag
SET @intFlag = @intFlag + 1
END
GO
Ответ 4
Как насчет этого:
BEGIN
Do Something
END
GO 10
... Конечно, вы можете поместить в него инкрементный счетчик, если вам нужно подсчитать.
Ответ 5
Простой ответ NO !!
.
В SQL нет
FOR
, но вы можете использоватьWHILE
илиGOTO
для достижения как работаетFOR
.
WHILE:
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
Я всегда предпочитаю WHILE
над оператором GOTO
.
Ответ 6
Дополнительные информации
Просто добавьте, поскольку никто не отправил ответ, который включает в себя, как на самом деле перебирать набор данных внутри цикла, вы можете использовать ключевое слово OFFSET FETCH.
Использование
DECLARE @i INT = 0;
SELECT @total = Count() FROM DATASET
WHILE @i < @total
BEGIN
SELECT STUFF FROM TABLE
ORDER BY COLUMN
OFFSET @i ROWS
FETCH NEXT 1 ROWS ONLY
SET @i = @i + 1;
END
Ответ 7
Для цикла loop официально не поддерживается SQL-сервером. Уже существует answer о достижении FOR Loop различными способами. Я подробно расскажу о способах достижения различных типов циклов на SQL-сервере.
FOR Loop
DECLARE @cnt INT = 0;
WHILE @cnt < 10
BEGIN
PRINT 'Inside FOR LOOP';
SET @cnt = @cnt + 1;
END;
PRINT 'Done FOR LOOP';
Если вы знаете, вам нужно выполнить первую итерацию цикла в любом случае, тогда вы можете попробовать версию SQL Server DO..WHILE или REPEAT..UNTIL.
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;