我正在尝试使此代码仅在i。[Price]大于现有值时才更新现有的[Price]。我很感激你的帮助。
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
此代码更新了成本和价格,但我需要帮助将其修改为仅在新价格高于旧价格时更新价格。
答案 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