关于MSSQL INSTEAD OF 触发器中断执行问题
时间:2011-11-07
来源:互联网
请注意:不是回滚..回滚是全部取消..我需要有一个执行..其他取消..
INSTEAD OF 触发器 会在所要更新数据的操作之前执行..
我想问的是..我执行完"INSTEAD OF 触发器"
用什么方式来停止后续的操作..
-----------------------------
已知:Trigger tr_A ON tbl_A INSTEAD OF Insert
已知:Trigger tr_B ON tbl_A For Insert
执行:Insert into tbl_A
想法步骤:
1)Insert tbl_A 触发 tr_A
2)有某语句执行中断
3)Insert into tbl_A和tr_B不执行
求解
第二步需要怎么做
作者: solomon300 发布时间: 2011-11-07
作者: AcHerat 发布时间: 2011-11-07
那你直接不要第二个触发器不就行了。
问题这里是有一个判断的..
重要的不是触发器 tr_b
我要的是 insert tbl_A 不执行..而tr_A 要执行..
tr_A有更新其他表的操作
作者: solomon300 发布时间: 2011-11-07
SQL code
create trigger Trigger tr_A ON tbl_A INSTEAD OF Insert as if exists (select 1 from inserted where col1 = 'a') return; insert tbl_A select * from inserted go
作者: NBDBA 发布时间: 2011-11-07
作者: AcHerat 发布时间: 2011-11-07
第二步很简单,判断条件符合就插入,否则直接退出,大概
SQL code
create trigger Trigger tr_A ON tbl_A INSTEAD OF Insert
as
if exists (select 1 from inserted where col1 = 'a')
return;
insert tbl_A select * from inserted
……
Return 不能中断后续执行吧..
我需要中断后续执行的.
作者: solomon300 发布时间: 2011-11-07
SQL code
create table tbl_A ( id int IDENTITY(1,1) ,col1 varchar(100) ) go create Trigger tr_A ON tbl_A INSTEAD OF Insert as print 'tr_A' if exists (select 1 from inserted where col1 = 'a') return; insert tbl_A(col1) select col1 from inserted go create Trigger tr_B ON tbl_A after Insert as print 'tr_B' go --测试 insert tbl_A (col1) values('b') --结果 tr_A tr_B (1 行受影响) (1 行受影响) insert tbl_A (col1) values('a') --结果(没有执行tr_B) tr_A (1 行受影响)
作者: NBDBA 发布时间: 2011-11-07
把这些判断全部放到insead of触发器里,判断什么的逻辑处理下,写成一个。
SQL code
create trigger Trigger tr_A ON tbl_A INSTEAD OF Insert as if exists (select 1 from inserted a inner join tbl_A b where a.col1 = b.col1) begin insert into tbl_B values('','') --此处执行中断:一切后续操作都将停止 --但是insert tbl_B 必须执行 end go
作者: solomon300 发布时间: 2011-11-07
引用 3 楼 nbdba 的回复:
第二步很简单,判断条件符合就插入,否则直接退出,大概
SQL code
create trigger Trigger tr_A ON tbl_A INSTEAD OF Insert
as
if exists (select 1 from inserted where col1 = 'a')
return;
insert tbl_A se……
是否执行测试下就知道,不要猜
作者: NBDBA 发布时间: 2011-11-07
引用 5 楼 solomon300 的回复:
引用 3 楼 nbdba 的回复:
第二步很简单,判断条件符合就插入,否则直接退出,大概
SQL code
create trigger Trigger tr_A ON tbl_A INSTEAD OF Insert
as
if exists (select 1 from inserted where col1 = 'a')
r……
好的..十分感谢..
作者: solomon300 发布时间: 2011-11-07
引用 4 楼 acherat 的回复:
把这些判断全部放到insead of触发器里,判断什么的逻辑处理下,写成一个。
SQL code
create trigger Trigger tr_A
ON tbl_A
INSTEAD OF Insert
as
if exists (select 1 from inserted a inner join tbl_A……
你的逻辑应该
SQL code
create trigger Trigger tr_A ON tbl_A INSTEAD OF Insert as insert into tbl_B values('','') --但是insert tbl_B 必须执行 if exists (select 1 from inserted a inner join tbl_A b where a.col1 = b.col1) begin --此处执行中断:一切后续操作都将停止 return end -- 正常情况下本身的事情需要做 insert tbl_A select * from inserted go
作者: NBDBA 发布时间: 2011-11-07
作者: solomon300 发布时间: 2011-11-07
作者: solomon300 发布时间: 2011-11-07
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28