【问题标题】:error handling inside a while loopwhile 循环内的错误处理
【发布时间】:2015-02-07 08:22:03
【问题描述】:

我有 8 张桌子。一位家长和7个孩子。在 while 循环内并从表中一一删除。 如果循环期间出现任何错误,则所有事务回滚。是否有可能在while循环内。

例子:

声明@Count int,@intFlag int

开始尝试 set @Count = (select count(ID) from MyTable where [Date] between getdate()-1 and 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 回滚 结束捕获

如果在处理过程中出现任何错误,则回滚所有子表事务

【问题讨论】:

  • 在循环之前开始一个事务。如果您可以使用 try-catch 来检测错误,请将循环放在 try-catch 块内,并在 try 块的末尾提交事务并在 catch 块内回滚

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


【解决方案1】:

在循环上方尝试 catch 块,如下所示

BEGIN TRANSACTION 

BEGIN TRY

/*  
 *  YOUR LOOP
 */

COMMIT TRANSACTION 
END TRY
BEGIN CATCH 

ROLLBACK TRANSACTION

END CATCH

【讨论】:

    猜你喜欢
    • 2013-05-18
    • 2014-12-25
    • 2017-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-24
    • 1970-01-01
    相关资源
    最近更新 更多