这个要求最好不要用触发器,解决方法虽然有,但是很容易出问题最好的解决方法是用事务:
BEGIN TRANSACTION
insert ...
if @@error<>0
begin
   ROLLBACK TRANSACTION 
   return
end
update ...
if @@error<>0
begin
   ROLLBACK TRANSACTION 
   return
end
...      --触发器需要的内容
if @@error<>0
begin
   ROLLBACK TRANSACTION 
   return
end
COMMIT TRANSACTION

解决方案 »

  1.   

    你指的是执行语句还是在响应的INSERT触发器了的执行UPDATE
      

  2.   

    create trigger t_InsertUpdate on yourtable  after insert,updateas   ...
      

  3.   

    建立一个for insert的触发器不就成了么?
      

  4.   

    for insert 不行,如果在insert之后,不对某些字段update我这个触发器就
    不执行,有没有比较好的方法啊
      

  5.   

    首先得搞清楚一些情况.
    在insert 之后有一个update动作
    这两者之间存在时间限制吗?
    比如:insert 是在昨天发生的,今天才发生update动作,这个时候触发器执行吗?如果有连续两个insert ,再有一个update,这时触发器执行吗?
    如果有一个insert,其后再连续产生两个update,这两个update都要求触发器执行吗?
      

  6.   

    在此基础上,可以按照这个思路去做:
    1.建立一个表tbinfo,用来保存一些状态信息,包括如下字段:
      修改状态:记录最近发生过的操作,取值:0 无,1 新增,2 修改,3 删除
      时间:记录操作时间
      这个表中只有一条记录,每次发生表的操作时都更新.
    2.建立如下触发器:
    a.插入触发器,记录插入状态:
    CREATE TRIGGER [recordinsert] ON [dbo].[你要监控的表] 
    FOR INSERT
    AS
    truncate table tbinfo
    insert into tbinfo(修改状态,时间) values(1,getdate())b.删除触发器,记录删除状态:
    CREATE TRIGGER [recorddelete] ON [dbo].[你要监控的表] 
    FOR DELETE
    AS
    truncate table tbinfo
    insert into tbinfo(修改状态,时间) values(3,getdate())a.修改触发器,记录修改状态,同时判断前一个动态,如果是新增,则执行相应的处理:
    CREATE TRIGGER [recordupdate] ON [dbo].[你要监控的表] 
    FOR UPDATE
    AS
    if exists(select * from tbinfo where 修改状态=1)
    --如果有时间限制,就用:
    --if exists(select * from tbinfo where 修改状态=1 and DATEDIFF ('mm' ,时间 , getdate())<xx)
    begin
    .....你的处理
    end
    truncate table tbinfo
    insert into tbinfo(修改状态,时间) values(2,getdate())