Я не совсем уверен, чего пытались достичь ваши объединения sh. Вы должны иметь возможность выполнить свою проверку и вставить полностью, используя псевдотаблицу Inserted
. Повторная проверка обновления не требуется, так как raiserror
не позволит продолжить работу остальной части триггера.
Вы можете использовать выражение case
для вычисления скидки.
CREATE TRIGGER Products_UPDATE
ON Products
AFTER INSERT, UPDATE
AS
BEGIN
SET NOCOUNT ON;
IF EXISTS (
SELECT 1
FROM Inserted I
WHERE I.DiscountPercent > 100 OR I.DiscountPercent < 0
) BEGIN
-- Should be using throw
RAISERROR(N'Percent has to be between 0 and 100',16,1);
END;
UPDATE Products SET
DiscountPercent = DiscountPercent * 100
WHERE id IN (SELECT id FROM Inserted)
AND DiscountPercent < 1;
END;
GO
Примечание: вам действительно стоит использовать throw
, а не raiserror
.