Как сделать эквивалентный триггер INSTEAD OF из триггера AFTER? - PullRequest
0 голосов
/ 17 апреля 2020

У меня есть триггер 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 долларов.

Ответы [ 2 ]

0 голосов
/ 17 апреля 2020

Кажется, что вы можете просто использовать проверочное ограничение вместо триггера:

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

Это и проще, и эффективнее, чем использование триггера - единственное отличие состоит в том, что вы не получите пользовательский сообщение об ошибке.

0 голосов
/ 17 апреля 2020

Не используйте триггер для этого. Просто используйте ограничение check:

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

В качестве бонуса это будет работать как update с, так и insert с.

...