Sql 在带有from子句的insert中插入到输出表中

Sql 在带有from子句的insert中插入到输出表中,sql,sql-server,Sql,Sql Server,我正在尝试复制表中的一些行,其中包含一些更改的值,并且我还需要存储一个旧的(将丢失的)id,以便稍后进行进一步处理。我试图使用输出子句存储该信息,但SQL Server抛出以下错误: Msg 4104 <...> The multi-part identifier could not be bound. 这是我的问题: declare @outputTable table ( oldElementID int, id int,

我正在尝试复制表中的一些行,其中包含一些更改的值,并且我还需要存储一个旧的(将丢失的)id,以便稍后进行进一步处理。我试图使用输出子句存储该信息,但SQL Server抛出以下错误:

Msg 4104 <...> The multi-part identifier could not be bound.
这是我的问题:

declare @outputTable table 
(
    oldElementID    int,
    id              int,
    name            varchar(50),
    modelID         bigint
);

Insert into Elements
(name, modelID)
Output e.id as oldElementID, 
    Inserted.id,
    Inserted.name,
    Inserted.modelID into @outputTable
select e.name, @newModelID
from Elements as e
where e.modelID = @oldModelID
注意:@oldModelID和@newModelID是先前声明和设置的

我不确定我的逻辑是否错误,我必须采取不同的方法(但我确信这样做是可能的)。或者,如果我只是有一个错误,我不能完全把我的手指

任何帮助都将不胜感激


谢谢

我重新创建了这样的问题:

CREATE TABLE #a (a INT, b INT)

INSERT INTO #a (a,b) VALUES (42, 43)

INSERT INTO #a (a, b)
OUTPUT a.a, a.b, inserted.a, inserted.b
SELECT a.b, a.a
FROM #a a
插入操作生成以下消息:

Msg 4104, Level 16, State 1, Line 7
The multi-part identifier "a.a" could not be bound.
Msg 4104, Level 16, State 1, Line 7
The multi-part identifier "a.b" could not be bound.

这是因为INSERT命令无法看到我在select命令中使用的别名“a”。

我不明白,被删除的伪表在更新和删除时会被填充,这是一个INSERT,使用查询中的信息。没有任何内容被删除或更新。oops。很抱歉找不到哪个标识符?或者你在msg 4104中看到了省略?回复了一个答案。显示问题所在。从本质上讲,您无法以您想要的方式获得输出。你可以分两步来做:1。选择表变量2的新值。从表变量更新Elements表。除了链接的副本外,另请参见:实际有效。现在我有点担心性能,因为在“on”子句中,我基本上必须使用而不是=来获取不匹配的行(我没有测试它)。但这是可行的。谢谢
Msg 4104, Level 16, State 1, Line 7
The multi-part identifier "a.a" could not be bound.
Msg 4104, Level 16, State 1, Line 7
The multi-part identifier "a.b" could not be bound.