MSSQL:在触发器执行期间发生错误会发生什么?

时间:2009-03-27 19:32:06

标签: sql-server transactions triggers atomic

关于MS SQL Server的更新和插入触发器,有没有办法使它们成为原子?换句话说,如果在触发期间发生错误,是否可以自动回滚原始插入或更新?

2 个答案:

答案 0 :(得分:4)

触发器自动成为表上插入/更新/删除原子DML语句的一部分。

您只需在触发器中发出ROLLBACK TRAN即可回滚触发器和原始I / U / D语句中的所有工作。如果有的话,最外面的tran也会回滚。

重要

在SQL 2000及更早版本的触发器中回滚会中止批处理。在违规的I / U / D运行后没有代码。 See Erland great articleanother

对于带有TRY / CATCH的SQL 2005,执行将转到CATCH块,您的批处理(也称为存储过程等)将正常退出。

Rollbacks and Commits in Stored Procedures and Triggers。触发器和TRY / CATCH交互为here

答案 1 :(得分:0)

MSDN中有一篇很好的文章讨论触发器和事务,位于此处:

http://msdn.microsoft.com/en-us/magazine/cc164032.aspx

基本上,您希望使用事务来使操作成为原子。