例如一个学生表和一个学生成绩表,如果删除某个学生,那么对应的学生成绩表里面该学生所有的成绩要删除,我写的触发器如下create trigger mytrigger BEFORE delete on [dbo].[student]for each rowbegin
delete score
from stdudent,score
where score.sname=stdudent.sname
end

解决方案 »

  1.   

    做个外键约束就可以了啊。你的是ORACLE吧???
      

  2.   

    例如:   a b 两个表   a表中存有客户号,客户名称   b表中存有每个客户的订单   有了外键后   你只能在确信b 表中没有客户x的订单后,才可以在a表中删除客户x   建立外键的前提: 本表的列必须与外键类型相同(外键必须是外表主键)。   指定外键关键字: foreign key(列名)   引用外键关键字: references <外键表名>(外键列名)   事件触发限制: on delete和on update , 可设参数cascade(跟随外键改动), restrict(限制外表中的外键改动),set Null(设空值),set Default(设默认值),[默认]no action   例如:   outTable表 主键 id 类型 int   创建含有外键的表:   create table temp(   id int,   name char(20),   foreign key(id) references outTable(id) on delete cascade on update cascade);   说明:把id列 设为外键 参照外表outTable的id列 当外键的值删除 本表中对应的列筛除 当外键的值改变 本表中对应的列值改变。   建键几个原则:   1、 为关联字段创建外键。   2、 所有的键都必须唯一。   3、避免使用复合键。   4、外键总是关联唯一的键字段。
      

  3.   

    delete * from  scroe where sname = deleted.sname通过名字关联?没有id吗?
      

  4.   


    Create Or Replace Trigger mytrigger Delete On student 
    For Each Row 
    Begin
        Delete From score 
        Where sname = :Old.sname ;
    End ;
    /
    如果是oracle,应该这么写。其是 :old 代表你要删除的那行,可以看看有关触发器的资料。
      

  5.   

    Create Or Replace Trigger mytrigger Before Delete On student 
    For Each Row 
    Begin
        Delete From score 
        Where sname = :Old.sname ;
    End ;
    /
      

  6.   

    不是ORACLE的,是SQL SERVER的
    我这只是为了学习下触发器,所以楼上的有提到用级联删除的,那种方法当然可以,但我是想通过触发器实现。之前我写的删除触发器是没有用BEFORE,这个时候就会出现这些的问题,它先在学生表中删除掉学生表里的记录,然后再在成绩表里面去找,如果能和学生表的通过学生名称关联上的,那么就删除成绩表里面的记录,这样导致结果错误。我的目的是在学生表里删除哪个学生,那么相应的删除该学生的成绩。上面我写的触发器都编译通不过,请教各位大侠
      

  7.   

    CREATE TRIGGER [tg_delete_department]
    ON [dbo].[department] 
    FOR DELETE 
    AS
    begin
    delete employees
    from employees e, deleted d
    where e.did = d.did
    end
    GO
      

  8.   

    --上面是删除触发器--这个是更新触发器
    CREATE TRIGGER [tg_update_department] ON [dbo].[department] 
    FOR UPDATE
    AS
    if UPDATE(did)
    begin
    update employees
    set did = i.did
    from employees e, deleted d, inserted i
    where e.did = d.did
    end
    GO