Синтаксис for-loop в SQL Server

Каков синтаксис цикла for в TSQL?

Ответ 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;

Ссылка