1

Table_ATable_Bという 2 つのテーブルがあります。Table_Apaymentのフィールドが更新されるたびに新しいレコードをTable_Bに挿入して、以前の合計支払い額と現在の合計支払い額の差を表示するトリガーを作成したいと考えています。2 つの表は以下のとおりです。

テーブル_A

A_id | payment |
 1   |  1000   |
 2   |   200   |

テーブル_B

B_id |  difference |

トリガーの私の実装は以下のとおりです。この差を計算する方法がわかりません:

CREATE TRIGGER trigger_Difference
ON Table_A
FOR UPDATE
AS
BEGIN
 DECLARE @Difference as INT
 DECLARE @PreviousDiff as INT

 BEGIN
    SELECT @PreviousDiff = SUM(payment)
    FROM Table_A
 END

 if update(payment)
    BEGIN
        SELECT @Difference = ***don't know what to put here*** 
        FROM inserted

        INSERT INTO Table_B (difference) VALUES (@Difference)
    END
END
4

1 に答える 1

1

この問題の別の解決策は、更新を行うストアド プロシージャで OUTPUT 句を使用するか、このメソッドをニーズに合わせて調整することです。

IF OBJECT_ID('TABLE_A') IS NOT NULL DROP TABLE TABLE_A
IF OBJECT_ID('TABLE_B') IS NOT NULL DROP TABLE TABLE_B
IF OBJECT_ID('sp_Payment_Update') IS NOT NULL DROP PROC sp_Payment_Update
GO

CREATE TABLE TABLE_A (
    A_ID INT IDENTITY(1,1),
    Payment INT
)

CREATE TABLE TABLE_B (
    B_ID INT ,
    OldPayment INT,
    NewPayment INT
)
GO

INSERT INTO TABLE_A VALUES (1000),(1200)
GO

CREATE PROC sp_Payment_Update
    @A_ID INT,
    @Payment INT
AS BEGIN

    UPDATE TABLE_A
    SET Payment = @Payment
        OUTPUT
            INSERTED.A_ID,
            DELETED.Payment,
            INSERTED.Payment
        INTO TABLE_B
    WHERE A_ID = @A_ID


    SELECT * FROM TABLE_A
    SELECT * FROM TABLE_B
END
GO

EXEC sp_Payment_Update 1, 1500

更新コード自体は、TABLE_B で行った多くの変更をログに記録します。また、TABLE_Bに UpdateDate 列をデフォルト値のGETDATE()で配置して、より有益なものにすることもできます。

于 2014-10-27T07:43:48.593 に答える