【发布时间】:2008-09-30 22:08:43
【问题描述】:
我正在尝试构建一个映射表,以将表中新行的 ID 与从中复制它们的行关联起来。 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 Clause的文章有一个描述类似用法的示例E:
OUTPUT INTO 子句返回值 从正在更新的表中 (WorkOrder) 以及来自产品 桌子。产品表用于 FROM 子句指定行 更新。
有人用过这个功能吗?
(与此同时,我已经重写了我的代码以使用游标循环来完成这项工作,但这很丑,我仍然很好奇)
【问题讨论】:
标签: sql-server