你必须使用游标来实现(Cursor)因为,当有批量数据增删时,临时表Inserted或Deleted中也有批量数据!
对吧?!说错了,别笑:(

解决方案 »

  1.   

    -- =============================================
    -- 触发器AFTER_UPDATE_CASHBANKACCT
    -- 更新CN_BalanceAdjust表的日记账余额
    -- =============================================
    IF EXISTS (SELECT name 
       FROM   sysobjects 
       WHERE  name = 'AFTER_UPDATE_CASHBANKACCT' 
       AND    type = 'TR')
        DROP TRIGGER AFTER_UPDATE_CASHBANKACCT
    GOCREATE TRIGGER AFTER_UPDATE_CASHBANKACCT
    ON [dbo].[ZZ_CashBankAcct] 
    FOR UPDATE,INSERT,DELETE
    AS 
    BEGIN
    UPDATE cn_balanceadjust
    SET  cn_balanceadjust.entbalance = cn_balanceadjust.entbalance + inserted.ammount - deleted.ammount
       FROM inserted,deleted
       WHERE cn_balanceadjust.year = deleted.year AND 
             cn_balanceadjust.acctcode = deleted.acctcode AND 
             cn_balanceadjust.period = deleted.period AND 
            cn_balanceadjust.acctid = deleted.acctid AND 
             cn_balanceadjust.direction = deleted.direction
    END
    GO
      

  2.   

    -- =============================================
    -- 触发器AFTER_UPDATE_CASHBANKACCT
    -- 更新CN_BalanceAdjust表的日记账余额
    -- =============================================
    IF EXISTS (SELECT name 
       FROM   sysobjects 
       WHERE  name = 'AFTER_UPDATE_CASHBANKACCT' 
       AND    type = 'TR')
        DROP TRIGGER AFTER_UPDATE_CASHBANKACCT
    GOCREATE TRIGGER AFTER_UPDATE_CASHBANKACCT
    ON [dbo].[ZZ_CashBankAcct] 
    FOR UPDATE,INSERT,DELETE
    AS 
    BEGIN
    UPDATE cn_balanceadjust
    SET  cn_balanceadjust.entbalance = cn_balanceadjust.entbalance + inserted.ammount - deleted.ammount
       FROM inserted,deleted
       WHERE cn_balanceadjust.year = deleted.year AND 
             cn_balanceadjust.acctcode = deleted.acctcode AND 
             cn_balanceadjust.period = deleted.period AND 
            cn_balanceadjust.acctid = deleted.acctid AND 
             cn_balanceadjust.direction = deleted.direction
    END
    GO