CREATE TRIGGER 名2 ON 员工登记表
FOR update
AS
if update(离职日期)
begin
  insert 离职员工记录表 select * from inserted
  delete 员工登记表 where 员工编号 in (select 员工编号 from inserted)
end

解决方案 »

  1.   

    delete from 员工登记表
    where id in(select id from inserted)
      

  2.   

    根据你的这个要求,为什么不建一个级联删除的约束关系呢。alter table 员工当值表 drop constraint 外键名alter table 员工当值表 add constraint 外键名 foreign key(员工编号) references 员工登记表(员工编号) on delete cascade
      

  3.   

    请问这种做法是否保证了在删除“员工登记表”的员工时,同时保留“员工当值表”的记录呀?
    但我不是太明白
    “alter table 员工当值表 add constraint 外键名 foreign key(员工编号) references 员工登记表(员工编号) on delete cascade”
    这语法是什么意思。
    可不可以解析一下呢?
    还有,这是不是结合在大力那个触发器里面呀?
    这是我的做法(只是照套而已):
    CREATE TRIGGER 名2 ON 员工登记表
    FOR update
    AS
    if update(离职日期)
    begin
      insert 离职员工记录表 select * from inserted
      alter table 员工当值表 drop constraint 外键名
      alter table 员工当值表 add constraint 外键名 foreign key(员工编号) references 员工登记表(员工编号) on delete cascade
      delete 员工登记表 where 员工编号 in (select 员工编号 from inserted)
    end
    但是失败了,说是“不能删除外键约束”,请问是什么原因?
      

  4.   

    仔细看了你的问题,明白了你的目的。
    你的要求,只能用触发器来做。你就不要建外键指向员工登记表了,因为有外键(且不是级联删除更新型外键)的时候,是不允许删除有儿子记录的父记录的。
    级联删除更新外键是指当删除或修改主记录的时候,对应的子记录都会被自动删除或更新,但这显然不是你要的。
    我建议你有两种做法,
    方法1 不要建任何外键,这只是在技术层面的解决,但我不推荐。方法2 我觉得从系统设计角度出发,在员工登记表中,加一个子段Status,标示状态,0(缺省,表示在职) 1(离职),2(其它)。我觉得这样比你现在要删除这条记录好的多。
      

  5.   

    谢谢大家的帮忙,
    我想通我的问题了,就按enhydraboy 的说法做算了。