本文摘自《锋利的SQL》:http://item.jd.com/10380652.html
14.1.2 COMMIT和ROLLBACK TRANSACTION
当执行能够激发触发器操作的语句时,触发器中的操作也将包含在该语句的事务处理过程中。即使在SQL Server的自动事务处理模式下,也是如此。在自动事务处理模式下,当语句遇到错误时,会有隐含的BEGIN TRANSACTION语句来回滚该语句所影响的修改。但是,这个回滚操作对批处理中的其它语句没有影响,不会回滚前面操作正常的语句。因为当语句完成时,该事务要么提交,要么回滚,事务处理已经结束。但是,当该语句激发触发器时,这个隐含事务将一直有效,直至触发器操作完成。因此,这也就给予了在触发器中回滚该语句操作的机会。需要注意的是,这个回滚操作也会终止批中对该语句后面语句的执行。
例如,下面的示例为DetailTable表的INSERT和UPDATE操作定义了触发器,当向表中插入新行或更新行时,要求ProductID、ProductCount和Price列的值不能为0,否则将执行ROLLBACK TRANSACTION进行回滚。
USE AdventureWorks;
GO
-- 创建表
CREATE TABLE DetailTable
(OrderID int, ProductID int, Product