关于MS SQL Server的更新和插入触发器,有没有办法使它们成为原子?换句话说,如果在触发期间发生错误,是否可以自动回滚原始插入或更新?
答案 0 :(得分:4)
触发器自动成为表上插入/更新/删除原子DML语句的一部分。
您只需在触发器中发出ROLLBACK TRAN即可回滚触发器和原始I / U / D语句中的所有工作。如果有的话,最外面的tran也会回滚。
重要强>
在SQL 2000及更早版本的触发器中回滚会中止批处理。在违规的I / U / D运行后没有代码。 See Erland great article和another
对于带有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
基本上,您希望使用事务来使操作成为原子。