有两个表 tb1 ,tb2tb1中的id
是 tb2 的 tid如何写一个触发器删除tb1中的一条记录 相应删除 tb2中的 tb2.tid = tb1.id 中的记录

解决方案 »

  1.   

    这个有2种方法 一种是建立主外键 用级联删除
    还有一种就是 AFTER 触发器
    createt trigger d_tb1 on tb1
    after delete
    as
    begin 
      delete tb2
      from tb2 join deleted d on tb2.tid=d.id
    end
      

  2.   

    create tigger f on tb2
    after delete
    as
    begin
    delete tb2 from tb2,delete d where tb2.tid=d.id
    end
      

  3.   

    d.id 这里的d就是tb1吗   
      

  4.   

    什么时候把这个 tb1的名字命名成d了啊
      

  5.   

    不是 
    是deleted表
    你tb1删除的数据 会存储在deleted中
      

  6.   

    我在网站查到说 deleted表是 触发器中的特殊表
    是存放删除的记录的但
    这样写 为什么不行
    create trigger d_tb1 on tb1
    after delete
    as
    begin 
      delete from tb2 where tb2.tid = deleted.id
    end
    我不理解 这句 delete tb2
      from tb2 join deleted d on tb2.tid=d.id为什么
    delete 与from之间可以加表名
    还可以用join
    我不理解这句
      

  7.   

    其实如果你用MS-SSMS
    里面创建外键的时候有一个级联什么的
    你将Delete设为级联,那么当你删除这张表的数据时,其它表的数据也会删除
      

  8.   


    CREATE TRIGGER Tr_Delete ON tb1
    FOR DELETE
    AS
      BEGIN
        SET NOCOUNT ON
          DECLARE @id INT
          SELECT @id=id FROM DELETED
          DELETE FROM tb2
          WHERE tb2.tid=@id
        SET NOCOUNT OFF
      END
      

  9.   

    引用7楼的话:就像我们用
    SELECT * 
    FROM ta a
    LEFT OUTER JOIN tb b ON a.id=b.id一样DELETE FROM 这样也可以这样写还可以使用
    UPDATE语句也可以使用这样内联与外联的方式更多的语法可以参考F1联机帮助
      

  10.   

    为什么
    delete 与from之间可以加表名
    还可以用join我不理解这句delete就跟select一样,都可以用join的..
      

  11.   

    createt trigger d_tb1 on tb1
    after delete
    as
    begin 
    delete tb2 from tb2 join deleted d on tb2.tid=d.id
    end
      

  12.   

    这是基本语法 .
    带连接的delete虽然不是标准SQL
    但是目前版本都支持 
    你要是一定不要这样,可以写成
    create trigger d_tb1 on tb1
    after delete
    as
    begin 
      delete tb2
      where exists( 
      select  *   from deleted d where tb2.tid=d.id)
    end
      

  13.   

    FROM
    指定在 DELETE、SELECT 和 UPDATE 语句中使用的表、视图、派生表和连接表。语法
    [ FROM { < table_source > } [ ,...n ] ] < table_source > ::=
        table_name [ [ AS ] table_alias ] [ WITH ( < table_hint > [ ,...n ] ) ]
        | view_name [ [ AS ] table_alias ] [ WITH ( < view_hint > [ ,...n ] ) ]
        | rowset_function [ [ AS ] table_alias ]
        | user_defined_function [ [ AS ] table_alias ]
        | derived_table [ AS ] table_alias [ ( column_alias [ ,...n ] ) ]
        | < joined_table >< joined_table > ::=
        < table_source > < join_type > < table_source > ON < search_condition >
        | < table_source > CROSS JOIN < table_source >
        | [ ( ] < joined_table > [ ) ]< join_type > ::=
        [ INNER | { { LEFT | RIGHT | FULL } [OUTER] } ]
        [ < join_hint > ]
        JOIN参考基本语法吧,JOIN 也可以写在DELETE 后面的表中连接
      

  14.   


    标准语法写多了手抽筋
    所以变个格式继续
    好像 okay 和 OK 
    i am 和 i'm 一样多看下高手写的代码  或许对楼主有些帮助哦