2014-12-09 79 views
0

我有8个表。一位家长和7个孩子。在while循环内部并逐个从表中删除。 如果循环过程中发生任何错误,则返回所有事务。是否有可能在while循环中。在while循环内处理错误

实施例:

申报@count INT,@intFlag INT

开始尝试 组@count =(SELECT COUNT(ID)从MyTable的其中[日期] GETDATE() - 1之间和GETDATE( )) 如果@count> 0

开始 组@intFlag = 1

开始事务

while (@intFlag <= @Count) 
begin 

    update MyTable1 
     set column1 = 1 
    where [Date] between getdate()-1 and getdate(); 

    update MyTable2 
     set column2 = 1 
    where [Date] between getdate()-1 and getdate(); 

set @intFlag = @intFlag + 1 
end; 

提交

末尝试

开始抓 如果@@ TRANCOUNT> 0回滚 端部钩挂

如果处理其回滚所有子表中的任何错误交易

+0

在循环之前启动事务。 如果您可以使用try-catch来检测错误,请在try块结束时使用commit事务在try-catch块中放置循环,并在catch块内回滚 – Sach 2014-12-09 12:37:01

回答

0

尝试捕捉块上方的循环如下

BEGIN TRANSACTION 

BEGIN TRY 

/* 
* YOUR LOOP 
*/ 

COMMIT TRANSACTION 
END TRY 
BEGIN CATCH 

ROLLBACK TRANSACTION 

END CATCH