[MS SQL Server]
Добрый день, в одну табличку [Contact Message In] попадают данные, есть признак Processed, устанавливается в 0. Мне нужно пробежаться циклом по всем таким записям, как-то обработать и установить Processed в 1. Вот мой код:
declare @nullDate datetime = '1753-01-01'
, @exchangeCode varchar(20) = null;
select top 1 @exchangeCode=No_ from [dbo].[Contact Message In] where Processed=0;
while(@exchangeCode is not null)
begin
Print 'start loop ' + @exchangeCode
--код обработки, вырезал для краткости
--помечаем записи обработанными
update [Contact Message In] set Processed=1, [Received Message Date Time]=getdate() where No_=@exchangeCode and Processed=0;
Print 'updated' --вот тут фактически не происходит обновление
--берём следующую строку
select top 1 @exchangeCode=No_ from [dbo].[Contact Message In] where Processed=0;
Print 'next loop for ' + @exchangeCode --выводит ту же самую запись, хотя должен брать следующую
end
Собственно, пометил комментариями, допустим, приходит одна запись, цикл встаёт в бесконечность, при этом, если я вручную останавливаю запрос, то update [Contact Message In] set Processed=1 отрабатыват корректно. При запущенном цикле не отрабатывает, вот такой вывод я получаю, если останавливаю вручную:
start loop CNT105740
(1 row affected)
(1 row affected)
updated
next loop for CNT105740
start loop CNT105740
(0 rows affected)
(0 rows affected)
updated
next loop for CNT105740
start loop CNT105740
(0 rows affected)
(0 rows affected)
updated
next loop for CNT105740
start loop CNT105740
....