SQL Server : Endless WHILE EXISTS loop

标签 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:因为我在第一时间没有找到解决方案,所以我以这种方式创建了光标并更新了数据。之后,我发现还有几行未更新,因为函数存在数据问题并且无法更新该行的值。在这种情况下,字段始终为空,循环变得无限。

最佳答案

我不明白为什么你选择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/

相关文章:

SQL Server 2008,加入还是不加入?

sql - SSIS 将百分比转换为小数

c# - 我需要一些关于命中计数器算法的想法(按时间间隔分组)

mysql - SQL - 返回分区的较大者

mysql - 格式之间的转换

sql - 如何在 SQL Server 2000 中对 Varchar 日期进行排序

sql-server - SQL Server 2012上NULL是否占用空间

sql - 插入 SQL Server 时另一个表的输出字段

sql - 如果您有每日数据,如何每周分组

sql - 如何使用 sp_send_dbmail 发送多个查询?