AAA是主键吧。select @diff=a.BBB-b.CCC
    from inserted as a
         table1 as b
    where a.AAA=b.AAA

解决方案 »

  1.   

    更正一下,呵呵
    select @diff=a.BBB-b.BBB
        from inserted as a,
             table1 as b
        where a.AAA=b.AAA
      

  2.   

    再更正一下,呵呵,对一般的AFTER触发器来说,table1 表的和nserted表的一样
    select @diff=a.BBB-b.BBB
        from inserted as a,
             deleted as b
        where a.AAA=b.AAA 
     
      

  3.   

    哈哈~~ yang_(扬帆破浪)的才对。
      

  4.   

    to:  nononono(null,null)/warning(爱就爱了)/yang_(扬帆破浪)
    謝謝各位的回答,在我的table表中AAA是主鍵,所以以上方法非常好。但我想再問一下:
      如果AAA不是主鍵時要怎么辦?
      

  5.   

    表中总得有个主键吧!
    UPDATE原理就是删除一行(放入DELETED表)后,添加一行(放入INSERTED表)。
      

  6.   

    对你这样的要求,如果没有主键,触发器很容易出错,可能只有一个方法来保证触发器正常,那就是限定每次只能修改一条记录。create trigger tr_table1_update
    on table1
    for update
    as
    if @@RowCount>1 then
    begin
       RAISERROR ('一次只能修改一条记录,事务已经回滚.', 16, 1)
       ROLLBACK TRANSACTION 
    end
    select @diff=a.BBB-b.BBB
        from inserted as a,
             deleted as b
     --   where a.AAA=b.AAA    --这时可以不要这些条件,因为已经保证两个临时表都只有一条记录。
     
      

  7.   

    無論怎麼樣,我都覺得這個問題必須考慮一次性更改多筆的情況,所以采用Cursor的方法是最安全的,(即使沒有主鍵,也同樣可以計算出正確的差值來).