Sql server while循环内的错误处理

Sql server while循环内的错误处理,sql-server,tsql,sql-server-2008-r2,Sql Server,Tsql,Sql Server 2008 R2,我有8张桌子。一名家长和7名子女。在while循环中,从表中逐个删除。 如果在循环过程中出现任何错误,则所有事务回滚。在while循环中是否可能 例如: 声明@Count int、@intFlag int 开始尝试 set@Count=从MyTable中选择countID,其中[Date]介于getdate-1和getdate之间 如果@Count>0 开始 设置@intFlag=1 开始交易 while (@intFlag <= @Count) begin update

我有8张桌子。一名家长和7名子女。在while循环中,从表中逐个删除。 如果在循环过程中出现任何错误,则所有事务回滚。在while循环中是否可能

例如:

声明@Count int、@intFlag int

开始尝试 set@Count=从MyTable中选择countID,其中[Date]介于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回滚 端接


如果在其回滚所有子表事务的过程中出现任何错误,请尝试循环上方的catch块,如下所示

    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;
BEGIN TRANSACTION 

BEGIN TRY

/*  
 *  YOUR LOOP
 */

COMMIT TRANSACTION 
END TRY
BEGIN CATCH 

ROLLBACK TRANSACTION

END CATCH

在循环之前启动事务。如果您可以使用try-catch来检测错误,那么在try-catch块中有一个循环,在try块的末尾有commit事务,在catch块中有rollback