, который обновляет значения в других таблицах на основе значений во вновь вставленной строке.
Таблица «вставлена» в триггере FOR INSERT будет содержать значения, вставленные вашим INSTEAD OFтриггер, НЕ ваш оператор вставки.Например, рассмотрим следующий сценарий:
CREATE TABLE Test (
id int IDENTITY NOT NULL,
value varchar(20) NOT NULL,
forTriggerValue char(1) NULL
)
GO
CREATE TRIGGER forTrigger
ON Test
AFTER UPDATE
AS
IF EXISTS (SELECT * FROM inserted WHERE value = 'MyNewValue')
BEGIN
UPDATE Test SET
forTriggerValue = 'A'
FROM inserted
WHERE Test.id IN (SELECT id FROM inserted)
END
ELSE IF EXISTS (SELECT * FROM inserted WHERE value = 'InsteadOfValue')
BEGIN
UPDATE Test SET
forTriggerValue = 'B'
FROM inserted
WHERE Test.id IN (SELECT id FROM inserted)
END
ELSE
BEGIN
UPDATE Test SET
forTriggerValue = 'C'
FROM inserted
WHERE Test.id IN (SELECT id FROM inserted)
END
GO
CREATE TRIGGER insteadOfTrigger
ON Test
INSTEAD OF UPDATE
AS
UPDATE Test SET
value = 'InsteadOfValue'
FROM inserted
WHERE Test.id IN (SELECT id FROM inserted)
GO
INSERT INTO Test (value) VALUES ('MyValue')
GO
UPDATE Test SET value = 'MyNewValue' WHERE value = 'MyValue'
GO
SELECT * FROM Test
GO
Ваше «forTriggerValue» будет «B», а не «A».