SQL Server 受影响的行数@@rowcount一直为0问题

存储过程如下:

WHILE( 1=1 )
begin
	Begin Try
		Begin Transaction

		 Update RIS.dbo.A 
         set registerid_with_number = CDRDB_VIEW.DBO.ONLY_GET_Number(hisexamineid)
		 where  registerid IN (
                                  SELECT TOP 10000 registerid 
                                    FROM RIS.dbo.A 
                                   WHERE registerid_with_number IS NULL
                              )
        PRINT '更新一次'
		--全部更新完后,退出
		if @@rowcount = 0  
		begin
			COMMIT Transaction
			PRINT '最后提交一次'
			BREAK
		end


		COMMIT Transaction
		PRINT '提交一次'
		waitfor delay '00:00:01'  --睡眠1秒,避免锁表

	   End Try

	   Begin Catch
       .........................--省略

运行该过程,每次第一次就退出了,print @@rowcount的值,每次都是0,update明明影响了1万行,怎么可能受影响的行数为0呢? 刚开始以为是SQL SERVER自动提交刷新了受影响的行,改为手动提交后,依然@@rowcount一致为0

最终:

      @@rowcount不仅代表Insert,Update,Delete,Select返回的行,其它语句的行,它也记录。

       我在中间print '更新一次' 就重置了@@rowcount,所以一直为0

解决方法:

      将@@rowcount紧跟在需检测SQL语句下一行,不被任何语句重置即可。

Update RIS.dbo.A  

set registerid_with_number = CDRDB_VIEW.DBO.ONLY_GET_Number(hisexamineid)
 where  registerid IN (

                                        SELECT TOP 10000 registerid

                                           FROM  RIS.dbo.A 

                                       WHERE registerid_with_number IS NULL)
 --全部更新完后,退出
if @@rowcount = 0  
 begin
           COMMIT Transaction
           --PRINT '最后提交一次'
             BREAK
END

发布了35 篇原创文章 · 获赞 61 · 访问量 16万+

猜你喜欢

转载自blog.csdn.net/woailyoo0000/article/details/101782317
今日推荐