我不确定为什么这不起作用,语法看起来不错,但我不确定,我以前从未使用过此语句,所以我可能做错了。
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,所以我可以在以后链接其他一些数据。
有什么想法吗?
答案 0 :(得分:0)
检查https://msdn.microsoft.com/en-us/library/ms177564.aspx处的文档,特别是" from_table_name"的说明。我担心你会失去运气;如果我读得正确,说它只适用于除INSERT之外的每个更新语句。
答案 1 :(得分:0)
看看这个。它使用Merge
和Insert
:
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