如何从AFTER触发器生成等效的INSTEAD OF触发器



我有一个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

上面的触发器强制执行一个价格范围规则,该规则要求每个价格都在.50到500美元之间。

不要为此使用触发器。只需使用check约束:

alter table products_copy add constraint chk_products_copy_unitprice
check (unitPrice not between 0.50 and 500.00);

作为奖励,这将适用于updates和inserts。

您似乎可以使用检查约束而不是触发器:

alter table products_copy 
add constraint chk_products_copy_unit_price_range 
check (unitprice between 0.50 and 500.00); 

这比使用触发器更简单、更高效——唯一的区别是不会得到自定义的错误消息。

最新更新