Синтаксис цикла for в SQL Server - PullRequest
210 голосов
/ 20 мая 2011

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

Ответы [ 8 ]

337 голосов
/ 20 мая 2011

Нет цикла for, только цикл while:

DECLARE @i int = 0

WHILE @i < 20
BEGIN
    SET @i = @i + 1
    /* do some work */
END
193 голосов
/ 20 мая 2011

T-SQL не имеет цикла FOR, имеет цикл WHILE
WHILE (Transact-SQL)

WHILE Boolean_expression
BEGIN

END
27 голосов
/ 01 марта 2013

DECLARE @intFlag INT
SET @intFlag = 1
WHILE (@intFlag <=5) 
BEGIN
    PRINT @intFlag
    SET @intFlag = @intFlag + 1
END
GO
22 голосов
/ 23 июня 2017

Дополнительная информация

Просто чтобы добавить, что никто не опубликовал ответ, который включает в себя, как на самом деле выполнять итерации, хотя набор данных внутри цикла, вы можете использовать ключевые слова OFFSET FETCH .

Использование

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
7 голосов
/ 06 октября 2014

Как насчет этого:

BEGIN
   Do Something
END
GO 10

... конечно, вы можете поместить в него инкрементный счетчик, если вам нужно посчитать.

6 голосов
/ 22 сентября 2017

Цикл For официально еще не поддерживается сервером SQL. Уже есть ответ о достижении ЗА циклов разными способами. Я подробно излагаю ответ о способах достижения различных типов циклов в SQL-сервере.

ДЛЯ Loop

DECLARE @cnt INT = 0;

WHILE @cnt < 10
BEGIN
   PRINT 'Inside FOR LOOP';
   SET @cnt = @cnt + 1;
END;

PRINT 'Done FOR LOOP';

Если вы знаете, что вам все равно нужно завершить первую итерацию цикла, тогда вы можете попробовать DO..WHILE или REPEAT..UNTIL версию SQL-сервера.

DO..WHILE Loop

DECLARE @X INT=1;

WAY:  --> Here the  DO statement

  PRINT @X;

  SET @X += 1;

IF @X<=10 GOTO WAY;

ПОВТОР .. ДО цикла

DECLARE @X INT = 1;

WAY:  -- Here the REPEAT statement

  PRINT @X;

  SET @X += 1;

IFNOT(@X > 10) GOTO WAY;

Ссылка

6 голосов
/ 22 декабря 2015

Простой ответ: 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 заявление.

0 голосов
/ 21 мая 2018

Пример цикла Loop в T-SQL, в котором перечислены даты начала и конца текущего месяца.

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;  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...