бесконечный цикл CTE

#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
 

https://docs.microsoft.com/en-us/sql/t-sql/language-elements/break-transact-sql?view=sql-server-ver15

Комментарии:

1. Мне нужно сделать это с помощью sql-запроса, а не с помощью анонимного блока