SQL Server: бесконечный цикл WHILE EXISTS - PullRequest
4 голосов
/ 03 октября 2011

У меня проблема со следующим циклом WHILE EXISTS.Не могли бы вы подумать, что может быть причиной того, что это бесконечный цикл и почему он не обновляет значения?

declare @part varchar(20)

while exists ((select top 1 * from part1 p where isnull(brojRacuna,'')=''))
begin
set @part=''
set @part=(select top 1 partija from part1 p where isnull(brojRacuna,'')='')
begin tran
update part1
set  BrojRacuna= (select dbo.dev_brojracuna (@part))
where partija like @part
print @part
commit
end

РЕДАКТ. 1: Поскольку я не нашел решения в первый момент,Я создал курсор и обновил данные таким образом.После этого я обнаружил, что осталось несколько строк, которые не были обновлены, потому что функция имела проблему с данными и не могла обновить значения для этих строк.В этом случае поля всегда были пустыми, а цикл стал бесконечным.

1 Ответ

4 голосов
/ 03 октября 2011

Я не понимаю, почему вы выбираете значение partija, так как оно есть в предложении where, вы можете упростить многое следующим образом:

declare @part varchar(20)

while exists ((select 1 from part1 p where isnull(brojRacuna,'')='' and partija='1111'))
begin
begin tran
update part1
set  BrojRacuna= (select dbo.dev_brojracuna ('1111'))
where partija like '1111'
commit
end

Кстати, если у вас бесконечное числоцикл, возможно, функция dev_brojracuna не возвращает правильное значение, а brojRacuna остается неизменным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...