微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

sqlserver触发器无before的解决方案

由于sqlserver在同一张表不支持一个以上的级联删除(on delete cascade)

但在实际开发的时候、还是需要使用到的、所以我们不得不使用触发器来完成这项工作

问题又来了、由于从表存在外键、直接删除主表肯定是不行的、

sqlserver的触发器没有oracle的before关键字、这让我们很忧伤

但是方法还是有的、sqlserver的触发器有一个字段instead of

具体原理和学术上的解释这里不讲、用通俗的方法来解释:重写关键字的功能

看如下代码

create table a(aa int primary key);
create table b(bb int references a(aa));
insert into a values(1);
insert into b values(1);

create trigger tri_delete_a on a
instead of delete
as
begin
 declare @abc int;
 select @abc = aa from deleted;
 delete b where bb = @abc;
 delete a where aa = @abc;
end

在表a中、delete关键字已经不再是删除、而更像一个函数、其功能代码如下:

declare @abc int;
 select @abc = aa from deleted;
 delete b where bb = @abc;
 delete a where aa = @abc;


代码中deleted是指a表中被delete的数据、看如下代码

delete a where aa = 1

则deleted中的数据有aa=1的元组

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐