Можно ли ссылаться на обе таблицы INSERTED в предложении OUTPUT в триггере INSTEAD OF INSERT? - PullRequest
4 голосов
/ 21 октября 2010

SQL Server 2005 +

У меня есть представление с триггером INSTEAD OF INSERT.Внутри тела триггера я хочу использовать оператор с предложением OUTPUT, которое ссылается на обе таблицы INSERTED:

  • внешнюю таблицу INSERTED для триггера INSTEAD OF INSERT
  • внутренняя таблица INSERTED для предложения OUTPUT

MSDN говорит это :

Если оператор, который включаетПредложение OUTPUT используется внутри тела триггера, псевдонимы таблиц должны использоваться для ссылки на вставленные и удаленные таблицы триггера, чтобы избежать дублирования ссылок на столбцы с таблицами INSERTED и DELETED, связанными с OUTPUT.

Но псевдонимыне похоже на работу:

CREATE TRIGGER v_insert ON v
INSTEAD OF INSERT
AS BEGIN
  INSERT INTO t (a, b, c)
  OUTPUT inserted.a, inserted.b, outer_inserted.d INTO t_prime (a, b, d)
  SELECT a, b, c
  FROM inserted as outer_inserted
END

Выдает ошибку "Не удалось связать идентификатор из нескольких частей" external_inserted.d ". Это значит, что то, что я пытаюсь сделать, невозможно?

Ответы [ 2 ]

5 голосов
/ 21 октября 2010

Я прочитал его, так как псевдоним INSERTED потребуется для FROM, к которому вы обращаетесь к триггеру INSERTED.

INSERTED в условии OUTPUT может только ссылаться на данные, вставленные в t.

Таким образом, вы не можете иметь outer_inserted.d в своем предложении OUTPUT

И вы не можете сделать это, как я это прочитал

INSERT INTO t (a, b, c)
  OUTPUT inserted.a, inserted.b INTO t_prime (a, b)
  SELECT a, b, c
  FROM inserted --no alias = **FAIL**
0 голосов
/ 27 ноября 2014

Это немного устарело, но вам не хватает столбца d в ​​SELECT из таблицы external_inserted, поэтому вы не можете ссылаться на него в OUTPUT.

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