有一张主表A,一张副表B。AB表有主外键关联
要删除表A中的一行,必须先删除表B的对应的一行,再删除表A中的那行。
我考虑了下,要用instead of触发器来写。在代码块中,先删除对应的表B中的那行,应该如何写代码,才能删除指定的列呢?我想了半天,一时没思路了请牛人帮忙支下招,感激不尽
要删除表A中的一行,必须先删除表B的对应的一行,再删除表A中的那行。
我考虑了下,要用instead of触发器来写。在代码块中,先删除对应的表B中的那行,应该如何写代码,才能删除指定的列呢?我想了半天,一时没思路了请牛人帮忙支下招,感激不尽
create table b(id int)
insert into a values(1)
insert into a values(2)
insert into a values(3)
insert into a values(4)
insert into a values(5)
insert into b values(1)
insert into b values(2)
insert into b values(3)
insert into b values(4)
insert into b values(5)
go
--原始数据
select * from a
/*
id
-----------
1
2
3
4
5(所影响的行数为 5 行)
*/select * from b/*
id
-----------
1
2
3
4
5(所影响的行数为 5 行)
*/go--创建触发器
create trigger my_trig on a INSTEAD OF delete
as
delete from b where id = (select id from deleted)
delete from a where id = (select id from deleted)
go--删除数据后的情况
delete from a where id = 1select * from a
/*
id
-----------
2
3
4
5(所影响的行数为 4 行)
*/select * from b
/*
id
-----------
2
3
4
5(所影响的行数为 4 行)
*/drop table a , b
在我的表中,有5个列都是主键,那
delete from b where id = (select id from deleted)
delete from a where id = (select id from deleted)
岂不是要用子查询查10次啊?
有没有优化点的写法?