检测在触发器中更新的记录

时间:2010-08-02 16:54:37

标签: 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上执行此操作?谢谢!

1 个答案:

答案 0 :(得分:3)

更新触发器中没有“更新表”。 update语句之前的值位于“已删除”表中,新值位于“已插入”表中。您可以使用COLUMNS_UPDATED函数检查特定列是否已更新。

以下是一个简单示例:An Introduction to Triggers -- Part II