我遇到以下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:因为我在第一时间没有找到解决方案,所以我以这种方式创建了游标和更新数据。之后我发现左侧的几行未更新,因为函数存在数据问题,无法更新该行的值。在这种情况下,字段一直是空的,循环变得无穷无尽。
答案 0 :(得分:4)
我不明白为什么你选择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保持不变。