2014-10-05 32 views
0

我試圖在代碼[i] [價格]大於現有值時更新現有[價格]。我很感謝你的幫助。僅在現有值小於新值時更新

MYDATABASE設置ANSI_NULLS ON 組QUOTED_IDENTIFIER ON GO --This扳機被附接到Price_Import表所以,當這表獲取新的價格值觸發將更新MYDATABASE菜單項表此類物品的價格,其是在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 

此代碼更新了成本和價格的主要項目表,但我需要幫助它修改爲僅更新價格當新的價格比舊的大。

回答

1

假設你的意思是你要更新的只當條件滿足時,只需添加在該條件下,on條款或where條款無論是在:

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;