#sql #sql-server-2014 #common-table-expression
Вопрос:
Я пытаюсь написать sql-запрос, который должен выполняться бесконечно, пока условие не станет ложным. Попробовал этот запрос , он возвращает все строки из таблицы tst (100 строк) и завершает работу
with cte1 as
(select 1 as x from tst where flag='N')
select x from cte1 option ( MaxRecursion 0 )
Но мне нужно, чтобы запрос последовательно извлекал строки до тех пор, пока условие (Флаг = ‘N’) не станет ложным
Флаг будет обновляться как часть другого процесса, до тех пор запрос должен продолжать получать записи.
Мне нужно это сделать, только с помощью SQL-запроса
Мы запускаем sql server 2014.
Комментарии:
1. Этот CTE вообще не будет зацикливаться, он не рекурсивен.
2. Для решения опроса вам нужен цикл с задержкой и проверкой, а не рекурсивный CTE
3. Что плохого в простом запросе, который возвращает все строки, предшествующие той, где
flag = n
?4. Просто чтобы убедиться, что вы знакомы с тем, как работает переполнение стека, есть ли причина, по которой вы еще не приняли какие-либо ответы или отзывы на свои предыдущие вопросы?
Ответ №1:
Вы можете использовать В ТО время как:
DECLARE @StopFlag INT = 0;
WHILE @StopFlag=0
BEGIN
IF something THEN BREAK
END
Комментарии:
1. Мне нужно сделать это с помощью sql-запроса, а не с помощью анонимного блока