我对以下 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:因为我在第一时间没有找到解决方案,所以我以这种方式创建了光标并更新了数据。之后,我发现还有几行未更新,因为函数存在数据问题并且无法更新该行的值。在这种情况下,字段始终为空,循环变得无限。
最佳答案
我不明白为什么你选择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 保持不变。
关于SQL Server : Endless WHILE EXISTS loop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7632372/