触发器中回滚中需要注意的地方
- 在官方文档http://technet.microsoft.com/zh-cn/library/ms181299.aspx中“互操作性”段落中有这么一句:
-
触发器继续执行 ROLLBACK 语句之后的所有其余语句。 如果这些语句中的任意语句修改数据,则不回滚这些修改。 执行其余的语句不会激发嵌套触发器。
其中“执行其余的语句不会激发嵌套触发器”,是否意味着在回滚操作后面的语句如果继续执行的话,后面语句触发的触发器就不会执行了?
比如后面的语句有针对一个表的update操作,而这张表又有update的触发器,这个时候update会执行成功,但触发器不会执行?
以下是网友帮忙写的测试用例,结果是触发了嵌套事务,此实验结果经过亲自验证:
--drop table t1 --drop table t2 create table t1(id int) create table t2(id int) insert into t2 values(100) go create trigger dbo.trigger_t1 on t1 for insert as rollback; select '这是rollback之后的语句,这里能执行' update t2 set id = 1; go create trigger dbo.trigger_t2 on t2 for update as select '这是t2的update触发器,这里能执行' go --插入数据 insert into t1 values(1) /* 这是rollback之后的语句,这里能执行 这是t2的update触发器,这里能执行 消息 3609,级别 16,状态 1,第 3 行 事务在触发器中结束。批处理已中止。 */ --没有记录 select * from t1 select * from t2 /* id 1 */
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· Open-Sora 2.0 重磅开源!