Есть ли способ заставить триггеры INSTEAD OF работать с SCOPE_IDENTITY? - PullRequest
2 голосов
/ 04 февраля 2012

Этот триггер:

ALTER TRIGGER InsteadTrigger on CustomerView
INSTEAD OF INSERT
AS
BEGIN
    SET NOCOUNT ON;

    INSERT INTO Person
        SELECT FirstName, LastName
        FROM inserted

Заставляет этот запрос возвращать ноль.

INSERT INTO CustomerView (FirstName, LastName) Values ('Jonathan', 'Allen')
SELECT SCOPE_IDENTITY()

Есть ли способ исправить триггер, чтобы SCOPE_IDENTITY возвращал правильное значение? (Я не могу использовать @@ IDENTITY, потому что на столе могут быть другие триггеры.)

1 Ответ

3 голосов
/ 04 февраля 2012

Нет, я не думаю, что это возможно.

Конечно, вы можете вернуть его из самого триггера.

ALTER TRIGGER InsteadTrigger on CustomerView
INSTEAD OF INSERT
AS
BEGIN
    SET NOCOUNT ON;

    INSERT INTO Person
        SELECT FirstName, LastName
        FROM inserted

        SELECT SCOPE_IDENTITY() AS PersonId
END

И вы можете использовать CONTEXT_INFO для подавления результирующего набора, за исключением случаев, когда он вам нужен.

Использование предложения OUTPUT не работает в этом контексте, как обсуждалось в этом элементе Microsoft Connect , оно оценивается перед вставкой в ​​основную таблицу и так до вызова функции IDENTITY.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...