CREATE TRIGGER 名2 ON 员工登记表
FOR update
AS
if update(离职日期)
begin
insert 离职员工记录表 select * from inserted
delete 员工登记表 where 员工编号 in (select 员工编号 from inserted)
end
FOR update
AS
if update(离职日期)
begin
insert 离职员工记录表 select * from inserted
delete 员工登记表 where 员工编号 in (select 员工编号 from inserted)
end
where id in(select id from inserted)
但我不是太明白
“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
但是失败了,说是“不能删除外键约束”,请问是什么原因?
你的要求,只能用触发器来做。你就不要建外键指向员工登记表了,因为有外键(且不是级联删除更新型外键)的时候,是不允许删除有儿子记录的父记录的。
级联删除更新外键是指当删除或修改主记录的时候,对应的子记录都会被自动删除或更新,但这显然不是你要的。
我建议你有两种做法,
方法1 不要建任何外键,这只是在技术层面的解决,但我不推荐。方法2 我觉得从系统设计角度出发,在员工登记表中,加一个子段Status,标示状态,0(缺省,表示在职) 1(离职),2(其它)。我觉得这样比你现在要删除这条记录好的多。
我想通我的问题了,就按enhydraboy 的说法做算了。