У меня проблема с использованием таблицы вместо триггера вставки.
Таблица, которую я создал, содержит столбец идентификаторов. Мне нужно использовать вместо вставки триггер на этой таблице. Мне также нужно увидеть значение вновь вставленного идентификатора из моего триггера, который требует использования OUTPUT / INTO внутри триггера. Проблема в том, что клиенты, которые выполняют INSERT, не могут видеть вставленные значения.
Например, я создаю простую таблицу:
CREATE TABLE [MyTable](
[MyID] [int] IDENTITY(1,1) NOT NULL,
[MyBit] [bit] NOT NULL,
CONSTRAINT [PK_MyTable_MyID] PRIMARY KEY NONCLUSTERED
(
[MyID] ASC
))
Далее я создаю простой вместо триггера:
create trigger [trMyTableInsert] on [MyTable] instead of insert
as
BEGIN
DECLARE @InsertedRows table( MyID int,
MyBit bit);
INSERT INTO [MyTable]
([MyBit])
OUTPUT inserted.MyID,
inserted.MyBit
INTO @InsertedRows
SELECT inserted.MyBit
FROM inserted;
-- LOGIC NOT SHOWN HERE THAT USES @InsertedRows
END;
Наконец, я пытаюсь выполнить вставку и получить вставленные значения:
DECLARE @tbl TABLE (myID INT)
insert into MyTable
(MyBit)
OUTPUT inserted.MyID
INTO @tbl
VALUES (1)
SELECT * from @tbl
Проблема в том, что все, что я когда-либо получу, это ноль. Я вижу, что строка была правильно вставлена в таблицу. Я также знаю, что если я удалю OUTPUT / INTO из триггера, эта проблема исчезнет.
Есть мысли о том, что я делаю не так? Или как я хочу сделать что-то невыполнимое?
Спасибо.