トリガー内で更新されたレコードの検出

sql-server
トリガー内で更新されたレコードの検出

トリガーがあるSQL Server 2008データベースがあります。 このトリガーは次のように定義されます。

CREATE TRIGGER [dbo].[Trigger_Car_Insert] ON [dbo].[Car] FOR INSERT
AS
    UPDATE
        [Lot]
    SET
        [TotalCars]=lotCars.TotalCars
    FROM
        [Lot] l JOIN (
            SELECT
                c.[LotID], COUNT(*) as 'TotalCars'
            FROM
                inserted i JOIN [Car] c ON i.[LotID]=c.[LotID]
                    WHERE
                            c.[IsSold]=0
            GROUP BY
                c.[LotID]
        ) lotCars ON l.[ID]=lotCars.[LotID]

これは挿入に適しています。 ただし、自動車が販売されると、IsSoldフラグがtrueに更新されます。 この場合、トリガーでLotテーブルの「TotalCars」プロパティを更新する必要があります。 挿入/削除されたばかりのものを検出するための「挿入」および「削除」テーブルがあることを知っています。 ただし、アップデートに相当するものを見つけることはできません。

SQL Server 2008でこれを行うにはどうすればよいですか? ありがとうございました!

  2  1


ベストアンサー

更新トリガーに「更新されたテーブル」はありません。 更新ステートメントの前の値は「削除済み」テーブルにあり、新しい値は「挿入済み」テーブルにあります。 特定の列が更新されたかどうかを確認するには、http://msdn.microsoft.com/en-us/library/ms186329.aspx [COLUMNS_UPDATED]関数を使用します。

簡単な例を次に示します。http://www.sqlteam.com/article/an-introduction-to-triggers-part-ii [トリガーの概要-パートII]

3


タイトルとURLをコピーしました