AFTER UPDATE,在更新以后操作,详见联机说明
CREATE TRIGGER trigger_name 
ON { table | view } 
[ WITH ENCRYPTION ] 
{
    { { FOR | AFTER | INSTEAD OF } { [ INSERT ] [ , ] [ UPDATE ] }
        [ WITH APPEND ]
        [ NOT FOR REPLICATION ]
        AS
        [ { IF UPDATE ( column )
            [ { AND | OR } UPDATE ( column ) ]
                [ ...n ]
        | IF ( COLUMNS_UPDATED ( ) { bitwise_operator } updated_bitmask )
                { comparison_operator } column_bitmask [ ...n ]
        } ] 
        sql_statement [ ...n ] 
    } 
}

解决方案 »

  1.   

    一个批量操作的SQL语句,触发一次触发器,而触发器的inserted/deleted表中存在多条记录。
    如果你的业务逻辑处理起来比较复杂,可以在触发器中用游标遍历inserted/deleted的方式逐个处理。
      

  2.   

    觸發器寫的有問題,select @RequireID=RequireID,@RequireCode=RequireCode,@BUCode=BUCode,@DeptID=DeptID,@PositionSerialCode=PositionSerialCode,@PostCode=PostCode,@GradeCodeMin=GradeCodeMin,@GradeCodeMax=GradeCodeMax,@RequireNumber=RequireNumber, @IsInProject=IsInProject, @ApproveCompleteTime=ApproveCompleteTime from inserted
    select @RequireID_old=RequireID,@RequireCode_old=RequireCode,@BUCode_old=BUCode,@DeptID_old=DeptID,@PositionSerialCode_old=PositionSerialCode,@PostCode_old=PostCode,@GradeCodeMin_old=GradeCodeMin,@GradeCodeMax_old=GradeCodeMax,@RequireNumber_old=RequireNumber, @IsInProject_old=IsInProject, @ApproveCompleteTime_old=ApproveCompleteTime from deleted你這麼寫,批量更新的時候,就只能得到一條紀錄的值,那麼“觸發器只影響了一條數據”。如果你的邏輯複雜的話,用游標逐條讀出inserted和inserted的數據,然後一條條做處理。
      

  3.   

    是你写的问题,这种情况应该用游标遍历inserted或者deleted表,许多人都犯这个错误。
      

  4.   

    真够复杂的
    oracle里有行级触发器,sqlserver里没有,只好使用游标遍历幻表
      

  5.   

    了解。不過inserted和deleted表,如何對應作對比比較是否有更改呢?
      

  6.   

    insert时,inserted有行,deleted没有行
    delete时,deleted有行,inserted没有行也可以分别建insert和delete触发器
    create trigger ti_表 on 表
    for insert
    as
    ...create trigger td_表 on 表
    for delete
    as
    ...
      

  7.   

    了解。不過inserted和deleted表,如何對應作對比比較是否有更改呢?
    ---------------------------------------------------------------
    判断RequireCode是否被更改
    where exists(select 1 from inserted i,deleted d where i.RequireID=d.RequireID and isnull(i.RequireCode,'')<>isnull(d.RequireCode,''))