如何从AFTER触发器中产生等效的INSTEAD OF触发器?

问题描述 投票:-1回答:2

我有一个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美元之间。

sql sql-server tsql database-trigger
2个回答
0
投票

请勿为此使用触发器。只需使用check约束即可:

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

作为奖励,这将同时适用于updateinsert


0
投票

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

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

与使用触发器相比,这既简单又有效-唯一的区别是您不会收到自定义错误消息。

© www.soinside.com 2019 - 2024. All rights reserved.