while循环中的错误处理

时间:2014-12-09 12:30:06

标签: sql-server tsql sql-server-2008-r2

我有8张桌子。一位父母和七个孩子。在while循环中,逐个从表中删除。 如果在循环期间出现任何错误,则所有事务回滚。是否可以在while循环中。

示例:

声明@Count int,@ intFlag int

开始尝试 设置@Count =(从MyTable中选择计数(ID),其中getdate() - 1和getdate()之间的[Date] 如果@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;

提交

结束尝试

开始捕捉 if @@ trancount&gt; 0回滚 结束捕获

如果在进程中发生任何错误,则回滚所有子表事务

1 个答案:

答案 0 :(得分:1)

尝试在循环上方捕获阻塞,如下面的

BEGIN TRANSACTION 

BEGIN TRY

/*  
 *  YOUR LOOP
 */

COMMIT TRANSACTION 
END TRY
BEGIN CATCH 

ROLLBACK TRANSACTION

END CATCH