Sql 仅当现有值小于新值时更新

Sql 仅当现有值小于新值时更新,sql,sql-server,Sql,Sql Server,我试图使此代码仅在I.[Price]大于现有[Price]时更新现有[Price]。谢谢你的帮助 MyDatabase设置ANSI_为空 在上设置带引号的\u标识符 去 --此触发器附加到Price_Import表,因此当此表获得新的价格值时,触发器将更新Mydatabase MenuItem表中此类项目的价格,Mydatabase MenuItem表是Mydatabase中的主项目表 ALTER TRIGGER [dbo].[trgafterinsertinto_Price_Impo

我试图使此代码仅在I.[Price]大于现有[Price]时更新现有[Price]。谢谢你的帮助

MyDatabase设置ANSI_为空 在上设置带引号的\u标识符 去 --此触发器附加到Price_Import表,因此当此表获得新的价格值时,触发器将更新Mydatabase MenuItem表中此类项目的价格,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

这段代码同时更新了成本和价格,但我需要帮助修改它,使其仅在新价格高于旧价格时更新价格。

您可能需要这样的代码


只需在where子句中添加having子句,如:having m.val>m.incVal

假设您的意思是仅在满足条件时更新行,只需在
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;