Я хочу использовать бесконечный WHILE
цикл в SQL Server 2005 и использование BREAK
ключевое слово для выхода от него на определенном условии.
while true
не работает, таким образом, я должен использовать while 1=1
. Существует ли лучший способ организовать бесконечный цикл?
Я знаю, что могу использовать goto
, но while 1=1 begin ... end
взгляды лучше структурно.
В дополнение к 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 с длинным опросом. Наличие цикла на стороне базы данных освобождает приложение от необходимости постоянно обращаться к базе данных для проверки свежих данных.
Если вам действительно нужно использовать бесконечный цикл, чем использовать при 1 = 1
как бы я это сделал.
Вопрос в том, нет ли другого способа избежать бесконечного цикла? Эти вещи часто идут не так;)
Использование While 1 = 1
с оператором Break
- это способ сделать это. В T-SQL нет константы для TRUE или FALSE .