try @ catch在使用@@ ROWCOUNT的while语句中有什么变化?

时间:2015-03-12 18:45:41

标签: tsql

我想在while循环中添加try catch。在@@ ROWCOUNT>上使用的循环0.虽然我有一个更新top(100)语句,但没有尝试捕获它。当我添加try时,while在第一个循环中结束。这个尝试对@@ ROWCOUNT有什么影响,使得while循环结束甚至很难更新触及100条记录?

--do we have anything to process?
select top 1 * from SomeTable where processedFlag is null

WHILE(@@ROWCOUNT > 0)
BEGIN

  begin try
    -- here I have an udpate top (100) statement that processes records with null flag in small batches
  end try
  begin catch
    -- update @@ROWCOUNT so the while continues?
    select top 1 * from SomeTable where processedFlag is null 
  end catch
END

1 个答案:

答案 0 :(得分:0)

我相信是因为

  

诸如USE,SET,DEALLOCATE CURSOR,CLOSE CURSOR之类的陈述,   BEGIN TRANSACTION或COMMIT TRANSACTION将ROWCOUNT值重置为0.

可能END TRY属于其中,但MSDN未列出所有可能的陈述。

这将解决问题:

DECLARE @i INT
SELECT @i = COUNT(*) FROM SomeTable WHERE processedFlag IS NULL

WHILE(@i > 0)
BEGIN
  BEGIN TRY
      UPDATE...
      SET @i = @@ROWCOUNT    
  END TRY
  BEGIN CATCH
      SELECT @i = COUNT(*) FROM SomeTable WHERE processedFlag IS NULL
  END CATCH
END