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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章