Я пытаюсь создать таблицу сопоставления, чтобы связать идентификаторы новых строк в таблице с теми, из которых они скопированы. Предложение OUTPUT INTO кажется идеальным для этого, но, похоже, оно не ведет себя в соответствии с документацией.
Мой код:
DECLARE @Missing TABLE (SrcContentID INT PRIMARY KEY )
INSERT INTO @Missing
( SrcContentID )
SELECT cshadow.ContentID
FROM Private.Content AS cshadow
LEFT JOIN Private.Content AS cglobal ON cshadow.Tag = cglobal.Tag
WHERE cglobal.ContentID IS NULL
PRINT 'Adding new content headers'
DECLARE @Inserted TABLE (SrcContentID INT PRIMARY KEY, TgtContentID INT )
INSERT INTO Private.Content
( Tag, Description, ContentDate, DateActivate, DateDeactivate, SortOrder, CreatedOn, IsDeleted, ContentClassCode, ContentGroupID, OrgUnitID )
OUTPUT cglobal.ContentID, INSERTED.ContentID INTO @Inserted (SrcContentID, TgtContentID)
SELECT Tag, Description, ContentDate, DateActivate, DateDeactivate, SortOrder, CreatedOn, IsDeleted, ContentClassCode, ContentGroupID, NULL
FROM Private.Content AS cglobal
INNER JOIN @Missing AS m ON cglobal.ContentID = m.SrcContentID
Результаты в сообщении об ошибке:
Msg 207, Level 16, State 1, Line 34
Invalid column name 'SrcContentID'.
(строка 34 является той, у которой есть выход OUTPUT INTO)
Экспериментация предполагает, что в OUTPUT INTO могут быть выбраны только строки, которые действительно присутствуют в объекте INSERT. Но это противоречит документам в книгах в Интернете. В статье о ВЫВОДЕ приведен пример E, описывающий аналогичное использование:Предложение OUTPUT INTO возвращает значения из обновляемой таблицы (WorkOrder), а также из Продукта Таблица. Таблица продуктов используется в предложение FROM, чтобы указать строки для обновление.
Кто-нибудь работал с этой функцией?
(Тем временем я переписал свой код, чтобы выполнить задание, используя цикл курсора, но это уродливо, и мне все еще интересно)