我試圖建立一個映射表,將表中新行的ID與它們從中複製的ID相關聯。 OUTPUT INTO子句似乎是完美的,但它似乎沒有根據文檔的行爲。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)
實驗表明,只有行是實際目前在INSERT的目標中可以在OUTPUT INTO中選擇。但是這與在線書籍中的文檔矛盾。在OUTPUT子句文章有介紹類似的用法示例E:
輸出INTO子句返回從表中被更新 (工單)值 並且還從產品 表。產品表用於 的FROM子句中,用於指定更新爲 的行。
有沒有人使用過此功能?
(在此期間我已經重寫我的代碼做使用遊標循環工作,但這是醜陋,我仍然好奇)
它提供瞭解決方案的線索。 MERGE聲明!然後@Simon設法提供語法。太好了! – lambacck 2011-06-02 20:12:43