【发布时间】:2016-06-08 03:25:12
【问题描述】:
我不确定为什么这不起作用,语法看起来不错,但我不确定,我以前从未使用过此语句,所以我可能做错了什么。
IF @PreCheckPassed = 1
--First recreate the lots that where deleted and store the new ID's
INSERT INTO [tblContainers] ([Name], [FeedLotID])
OUTPUT INSERTED.[ID], [b].[ID], INSERTED.[Name] INTO @CreatedLots
SELECT
[b].[Name], [b].[FYID]
FROM
@MergedLots AS [b]
SELECT * FROM @CreatedLots
错误发生在 [b].[ID] 的 OUTPUT 行
无法绑定多部分标识符“b.ID”。
我正在做的只是根据@MergedLots 表中的列表创建一些新记录,并且我正在尝试使用@MergedLots ID 输出新 ID,以便稍后链接其他数据。
有什么想法吗?
【问题讨论】:
-
它的写法意味着
@CreatedLots有两个Id列。您能否给出@CreatedLots、@MergedLots和tblContainers中的列并指出其中哪些具有标识列? -
它们都有 ID 列,@createdLots 有 1 个主键列,还有 2 个用于数据的其他列,一个 INT 和一个 VARCHAR,
-
INSERT语句的OUTPUT子句只能有inserted.column(目标表中的列)。它不能包含源表中的列。在您的示例中,[b].[ID]是源表中的一列。MERGE语句的OUTPUT子句可以包含来自源表和目标表的列。
标签: sql-server tsql