我不确定为什么这不起作用,语法看起来不错,但我不确定,我以前从未使用过这个语句,所以我可能做错了什么。
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,以便以后可以链接一些其他数据。
有什么想法吗?
看看这个。它使用Merge
和Insert
:
使用 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 之外的每个更新语句。