我有一个AFTER触发器,我试图将其等效于INSTEAD OF触发器。我有点理解如何执行INSTEAD OF触发器来代替触发操作,但是转换它会使我有些迷失。
这是我的AFTER触发器:
go
CREATE TRIGGER tgr_priceValidation
ON Products_Copy
FOR INSERT, DELETE AS
BEGIN
IF exists (select UnitPrice from Products_copy where UnitPrice NOT BETWEEN 0.50 AND 500.00)
BEGIN
RAISERROR(
' No product is allowed to have a unit price out of the range between $0.50 and $500.00',
16,
1
)
ROLLBACK TRANSACTION
END
END
go
上面的触发器强制执行一个价格范围规则,该规则要求每个价格在0.50到500美元之间。
请勿为此使用触发器。只需使用check
约束即可:
alter table products_copy add constraint chk_products_copy_unitprice
check (unitPrice not between 0.50 and 500.00);
作为奖励,这将同时适用于update
和insert
。
似乎您可以只使用检查约束而不是触发器:
alter table products_copy
add constraint chk_products_copy_unit_price_range
check (unitprice between 0.50 and 500.00);
与使用触发器相比,这既简单又有效-唯一的区别是您不会收到自定义错误消息。