【发布时间】:2011-11-29 17:58:25
【问题描述】:
我对以下 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: 因为我一开始没有找到解决方案,所以我以这种方式创建了光标并更新了数据。之后我发现剩下的几行没有更新,因为函数存在数据问题并且无法更新该行的值。在这种情况下,字段始终为空,循环变得无穷无尽。
【问题讨论】:
-
你为“exists()”编写的代码在哪里
-
我不明白你为什么在存在语句中需要“isnull(brojRacuna,'')=''”。
-
我不小心留下了一部分代码:'and partija='1111' ' 我们这里不需要它,因为我想更新所有 BrojRacuna 为 NULL 的行。
标签: sql sql-server tsql loops while-loop