方法很多!但是说明!我感到你考虑的不是很完善!例如如果你更新了数据!是不是也要更新那些数据那!
sql server 下/*但是你的这两个自字段之间不能要外间约束,因为sql server好像不能级联删除你可以把sql server的自动提交改了也许可以但是我没有试验过*/
create trigger kkk on tablename1 
for update,delete
as
begin
if (select count(*) from inserted)<=0 then
    /*说明你进行的是删除操作不是更新操作*/
  begin
    delete tablename2 from tablename2,deleted where tablename2.iid=deleted.iid
  end
else 
  begin
  /*说明进行的是更新操作,如果你把iid 字段的值101换成了100,你要把tablename2表里的原来是101的换成100*/
  update tablename2
  set tablename2.iid=inserted.iid
  from deleted,inserted
  where tablename2.iid=deleted.iid 
  end
end
oracle 下
create trigger kkk 
befor  delete or update on tablename
for each row
begin
if (:new.iid is  null) then
    /*说明你进行的是删除操作不是更新操作*/
  delete from tablename2 where tablename2.iid=:old.iid;
else  
  /*说明进行的是更新操作,如果你把iid 字段的值101换成了100,你要把tablename2表里的原来是101的换成100*/
  update tablename2
  set iid=:new.iid,
  where :old.iid=tablename2.iid;
  end if;
end;
我的说玩了!
不知道对你有没有帮助!

解决方案 »

  1.   

    1,在sql server如果仅仅为了删除方便,而放弃外键,我个人认为不值。这样,极容易产生垃圾数据,使业务逻辑编写和维护变得困难。
    2,在oracle里,只要在有外键的表上加一个属性就可以。用不着触发器。
      

  2.   

    to wwl007(疑难杂症):
    我的关键字userid只允许删除,不允许修改,所以不用考虑得很多。对如何使用触发器来做,我现在清楚了。另外上面各位众说不一,触发器不好吗?除了触发器外是否还有其它方法?