由于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] 举报,一经查实,本站将立刻删除。