2010-08-02 71 views
2

我有一个具有触发器的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。发生这种情况时,我需要触发器更新批次表上的“TotalCars”属性。我知道有一个“插入”和“删除”表来检测刚刚插入/删除的内容。但是,我无法弄清楚更新的等价物。

如何在SQL Server 2008上执行此操作?谢谢!

+0

如果你用我的解决方案(http://stackoverflow.com/questions/3388283/automatically-setting-a-field-value-in-sql/3388366#3388366)你不必处理所有这些情况。 – Giorgi 2010-08-02 16:57:57

回答