我想在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
答案 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