Каков синтаксис цикла 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;
