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