有一张主表A,一张副表B。AB表有主外键关联
要删除表A中的一行,必须先删除表B的对应的一行,再删除表A中的那行。
我考虑了下,要用instead of触发器来写。在代码块中,先删除对应的表B中的那行,应该如何写代码,才能删除指定的列呢?我想了半天,一时没思路了请牛人帮忙支下招,感激不尽

解决方案 »

  1.   

    create table a(id int)
    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
      

  2.   

    谢谢了。可以解决我的问题了。我还想问问,
    在我的表中,有5个列都是主键,那
    delete from b where id = (select id from deleted)
    delete from a where id = (select id from deleted)
    岂不是要用子查询查10次啊?
    有没有优化点的写法?