Sql 在带有from子句的insert中插入到输出表中
我正在尝试复制表中的一些行,其中包含一些更改的值,并且我还需要存储一个旧的(将丢失的)id,以便稍后进行进一步处理。我试图使用输出子句存储该信息,但SQL Server抛出以下错误: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,
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.