TSQL多部分标识符" b.ID"无法受约束。使用INSERT OUTPUT SELECT

时间:2016-06-08 03:25:13

标签: sql-server tsql

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

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,所以我可以在以后链接其他一些数据。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

检查https://msdn.microsoft.com/en-us/library/ms177564.aspx处的文档,特别是" from_table_name"的说明。我担心你会失去运气;如果我读得正确,说它只适用于除INSERT之外的每个更新语句。

答案 1 :(得分:0)

看看这个。它使用MergeInsert

Using OUTPUT clause to insert value not in INSERTED

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]

和单独的Update查询以更新ID