SQL Server:无尽的WHILE EXISTS循环

时间:2011-10-03 07:54:47

标签: sql sql-server tsql loops while-loop

我遇到以下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 个答案:

答案 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保持不变。