Как организовать бесконечный цикл с условием продолжения в SQL Server?

Я хочу использовать бесконечный WHILE цикл в SQL Server 2005 и использование BREAK ключевое слово для выхода от него на определенном условии.

while true не работает, таким образом, я должен использовать while 1=1. Существует ли лучший способ организовать бесконечный цикл?

Я знаю, что могу использовать goto, но while 1=1 begin ... end взгляды лучше структурно.

17
задан Victor Yarema 27 November 2015 в 15:16
поделиться

3 ответа

В дополнение к WHILE 1 = 1, как предлагают другие ответы, я часто добавляю "таймаут" к моим "бесконечным" циклам SQL, как в следующем примере:

DECLARE @startTime datetime2(0) = GETDATE();

-- This will loop until BREAK is called, or until a timeout of 45 seconds.
WHILE (GETDATE() < DATEADD(SECOND, 45, @startTime))
BEGIN
    -- Logic goes here: The loop can be broken with the BREAK command.

    -- Throttle the loop for 2 seconds.    
    WAITFOR DELAY '00:00:02';
END

Я нашел вышеупомянутую технику полезной в хранимой процедуре, которая вызывается из бэкенда AJAX с длинным опросом. Наличие цикла на стороне базы данных освобождает приложение от необходимости постоянно обращаться к базе данных для проверки свежих данных.

25
ответ дан 30 November 2019 в 11:22
поделиться

Если вам действительно нужно использовать бесконечный цикл, чем использовать при 1 = 1 как бы я это сделал.

Вопрос в том, нет ли другого способа избежать бесконечного цикла? Эти вещи часто идут не так;)

2
ответ дан 30 November 2019 в 11:22
поделиться

Использование While 1 = 1 с оператором Break - это способ сделать это. В T-SQL нет константы для TRUE или FALSE .

14
ответ дан 30 November 2019 в 11:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: