无法绑定 TSQL 多部分标识符"b.ID"。使用插入输出选择



我不确定为什么这不起作用,语法看起来不错,但我不确定,我以前从未使用过这个语句,所以我可能做错了什么。

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] 的OUTPUT行上。[标识]

无法绑定多部分标识符"b.ID"。

我所做的只是根据表@MergedLots中的列表创建一些新记录,然后尝试输出带有@MergedLots ID 的新 ID,以便以后可以链接一些其他数据。

有什么想法吗?

看看这个。它使用MergeInsert

使用 OUTPUT 子句插入不在 INSERT 中的值

merge into [tblContainers] A
USING @MergedLots AS [b]
on 1=0
WHEN NOT MATCHED THEN
 Insert ([Name], [FeedLotID])
 Values ([b].[Name], [b].[FYID])
OUTPUT 
 INSERTED.[ID], b.Id, INSERTED.[Name] INTO @CreatedLots;

此查询对性能不友好。或者,您可以有两个查询,第一个不考虑b.Id

INSERT INTO [tblContainers] ([Name], [FeedLotID])
    OUTPUT INSERTED.[ID], INSERTED.[Name] INTO @CreatedLots
    SELECT [b].[Name], [b].[FYID] 
    FROM @MergedLots AS [b]

以及用于更新 id 的单独Update查询

查看 https://msdn.microsoft.com/en-us/library/ms177564.aspx 的文档,特别是"from_table_name"的描述。 我担心你运气不好;如果我没看错,说它仅适用于除 INSERT 之外的每个更新语句。

最新更新