仅在现有值小于新值时更新

时间:2014-10-05 11:05:45

标签: sql sql-server

我正在尝试使此代码仅在i。[Price]大于现有值时才更新现有的[Pri​​ce]。我很感激你的帮助。

MyDatabase将ANSI_NULLS设置为ON         设置QUOTED_IDENTIFIER         走 - 此触发器附加到Price_Import表,因此当此表获得新的价格值时,触发器将更新Mydatabase MenuItem表中此类项目的价格,该表是Mydatabase中的主要项目表

     ALTER TRIGGER [dbo].[trgafterinsertinto_Price_Import_Table] ON [dbo].[Price_Import]
AFTER INSERT
    AS 
    BEGIN
    SET NOCOUNT ON;

     UPDATE [dbo].[MenuItem] 
SET [Price] = i.[Price] ,[Cost] = i.[Cost]
    FROM Inserted i
   WHERE MenuItem.PLU = i.PLU
   DELETE FROM dbo.Price_Import
   END

此代码更新了成本和价格,但我需要帮助将其修改为仅在新价格高于旧价格时更新价格。

2 个答案:

答案 0 :(得分:1)

假设您只想在满足条件时更新,只需在on子句或where子句中添加该条件:< / p>

UPDATE mi
    SET Price = i.Price,
        Cost = i.Cost
    FROM [dbo].[MenuItem] mi JOIN
         Inserted i
         on mi.PLU = i.PLU AND i.Price > mi.Price;

如果您的确只是price,请改用case

UPDATE mi
    SET Price = (CASE WHEN i.Price > mi.Price THEN i.Price ELSE mi.Price END)
        Cost = i.Cost
    FROM [dbo].[MenuItem] mi JOIN
         Inserted i
         on mi.PLU = i.PLU;

答案 1 :(得分:0)

你可能需要这样的stackUpdateHaving

只需将一个having子句放入where子句中,例如:HAVING m.val&gt; m.incVal