我的数据库是sqlserver2000,A表中有一个update 触发器,每当A表中的数据变动,自动修改B表的内容,我想实现在有的修改操作不让其触发,有的让其触发,下面写法是否可行?如果事务中出现回滚,会回到停止触发器之前的Enable状态吗?
对于这种需求,大家一般都采用什么好办法,请赐教,谢谢在delphi中使用ADOConnection调用事务,举例如下
 ADOConnection1.BeginTrans;//开始事务
try
  Alter table A Disable trigger tr_uptb //停止触发器
//A表中修改数据 update A set A.Value=100  where ..... ADOConnection1.CommitTrans;//提交事务
  Alter table A Enable trigger tr_uptb  //启用触发器
except
  ADOConnection1.RollbackTrans;//回滚事务
  Exit
end;数

解决方案 »

  1.   

    有的修改操作不让其触发,有的让其触发==>可以再触发器里判断
    如果是栏位的话 if update(XXX)
    如果是值的话,考虑select .. from inserted
      

  2.   

    每当A表中的数据变动,自动修改B表的内容直接在触发器中if update(a)就可以了
      

  3.   

    考虑下instead of 触发器和if update()相结合使用
      

  4.   

    关闭和打开触发器是DDL语句,写在事务里达不到你设想的要求
      

  5.   

    这个说法不对.原因是DDL修改是要获取Sch-M模式锁,看一下锁的兼容图就明白是否可行了。是的,但事务未提交时,其他进程会处于等待状态.原因是其他对表的操作SQL,编译期间要获取Sch-S锁,它与Sch-M不兼容,所以要等待。
    但就解决方案来说,使用DDL来限制触发器是不大可行的,因为会牵涉到一个用户权限问题。我觉得还是如#2楼所说,在TRIGGER内做判断比较好。