2.SQL Server DML触发器之COMMIT和ROLLBACK TRANSACTION

本文介绍了SQL Server中DML触发器如何处理COMMIT和ROLLBACK TRANSACTION。当触发器被激发时,其操作会包含在原始语句的事务中。如果触发器中存在不符合条件的插入或更新(如值为0),则会执行ROLLBACK,终止批处理中的后续语句。在显式或隐式事务中,触发器的ROLLBACK将回滚整个事务。SAVE TRANSACTION可用于设置保存点实现部分回滚。最后,示例展示了即使在COMMIT后,触发器内的ROLLBACK仍能回滚所有嵌套操作。
摘要由CSDN通过智能技术生成

本文摘自《锋利的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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值