Sql-Server
如果現有值高於插入值,則觸發以防止更新
如果現有值高於插入的值,我需要一個觸發器來防止更新價格。如果出現這樣的操作事務,觸發器應該阻止值更新但讓事務結束(即不回滾)。下面的一個不起作用 - 即使插入的值高於現有值,它也不會讓更新發生。
CREATE TRIGGER [dbo].[Prices_InsteadUpdate_Trigger] ON [dbo].[Prices] INSTEAD OF UPDATE AS SET NOCOUNT ON IF UPDATE(PRC_Value) AND EXISTS (SELECT * FROM deleted d JOIN inserted i ON d.PRC_PrcId = i.PRC_PrcId WHERE d.PRC_Value > i.PRC_Value) SELECT NULL SET NOCOUNT OFF
問候, 普熱梅克
您正在使用
INSTEAD OF UPDATE
,這意味著每次更新都將在觸發器中結束。
ELSE
如果第一個 IF 不為真,您可以添加一條語句進行更新。CREATE TRIGGER [dbo].[Prices_InsteadUpdate_Trigger] ON [dbo].[Prices] INSTEAD OF UPDATE AS SET NOCOUNT ON IF UPDATE(PRC_Value) AND EXISTS (SELECT * FROM deleted d JOIN inserted i ON d.PRC_PrcId=i.PRC_PrcId WHERE d.PRC_Value>i.PRC_Value) SELECT NULL ELSE UPDATE P SET PRC_Value = i.PRC_Value FROM dbo.Prices P INNER JOIN inserted i ON i.PRC_PrcId = P.PRC_PrcId; SET NOCOUNT OFF;
測試
CREATE TABLE dbo.Prices(PRC_PrcId INT IDENTITY(1,1) PRIMARY KEY NOT NULL, PRC_Value numeric(5,2)); INSERT INTO dbo.Prices(PRC_Value) VALUES(1.2) GO
更低的價格
UPDATE dbo.Prices SET PRC_Value = 0.5;
結果
(No column name) NULL
更高的價格
UPDATE dbo.Prices SET PRC_Value = 1.5;
結果
PRC_PrcId PRC_Value 1 1.50