Nem*_*cic 7 sql t-sql sql-server 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
Run Code Online (Sandbox Code Playgroud)
编辑 1:因为我第一时间没有找到解决方案,所以我以这种方式创建了游标并更新了数据。之后我发现剩下的几行没有更新,因为函数有数据问题并且无法更新该行的值。在那种情况下,字段一直是空的,循环变得无穷无尽。
小智 7
我不明白你为什么选择 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
Run Code Online (Sandbox Code Playgroud)
顺便说一句,如果你有一个无限循环,也许函数 dev_brojracuna 没有返回正确的值,而 brojRacuna 保持不变。