【发布时间】: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