歌曲表(sing):  主键 sno,其余字段若干
歌手表(singer):主键 cno,其余字段若干
专辑表(album): 主键 ano,其余字段若干
三者联系表(csrel):sno、cno ,ano
外键引用 sno外键引用sing(sno),cno外键引用singer(cno),ano外键引用album(ano)请问在删除singer表记录的时候,如何实现触发器能够删除其它表中所有的相关记录。
注:一首歌可以有多个歌手唱谢谢!

解决方案 »

  1.   

    不需要用触发器多个删除一起就可以了delete from...
    delete from...
    根据参数,先删除从表的,后删除主表的。
      

  2.   

    要求是要做触发器,这样在删除singer时就可以一起删除所有关联数据了
      

  3.   


    create trigger 触发器名称  
    on singer   
    for delete   
    as   
    declare @cno varchar(20)
    select @cno=cno from deleted
    delete from csrel where cno=@cno
      

  4.   

    用触发器可以这样
    create trigger my_tri on singer
    for delete 
    as
    begin
    delete sing from sing a, csrel c,deleted d where a.sno=c.sno and d.cno=c.cno
    delete album from album a,csrel c,deleted d where a.ano=d.ano and d.cno=c.cno
    end
      

  5.   


    CREATE TRIGGER trig_name
    ON singer
    FOR DELETE 
    AS
    BEGIN
      PRINT 'BEFORE DELETE...'
      SELECT * FROM sing
      SELECT * FROM singer
      SELECT * FROM album
      SELECT * FROM dbo.csrel
      PRINT 'AFTER DELETE...' 
      DELETE FROM csrel WHERE cno = (SELECT cno FROM deleted)
      DELETE FROM sing WHERE sno = (SELECT a.sno FROM csrel  a INNER JOIN deleted  b ON  a.cno = b.cno)
      DELETE FROM album WHERE ano = (SELECT a.ano FROM csrel  a INNER JOIN deleted  b ON  a.cno = b.cno)
    END
    上面的写法报错,哪位大侠帮忙看看
    消息 547,级别 16,状态 0,第 1 行
    DELETE 语句与 REFERENCE 约束"FK_singer_cno"冲突。该冲突发生于数据库"TESTH",表"dbo.csrel", column 'cno'。
    语句已终止。
      

  6.   

    CREATE TRIGGER trig_name
    ON singer
    FOR DELETE 
    这些做法都是不可以的,否则俺也不来问了
    删除的时候就已经不能删除了,因为删除时候会和外键冲突。
    我考虑的使用instead of触发器,但是由于一首歌可以有多个歌手唱,所以不能单纯地把其对应的歌曲删除,只有但这首歌没有其他歌手唱的时候才能删除
      

  7.   

    级联删除也不可以,尽管CSREL中的记录会被级联删掉,但是歌曲表(sing)中的记录不会被删掉