用clausule

时间:2018-07-26 18:06:20

标签: sql sql-server

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

Msg 4104 <...> The multi-part identifier could not be bound.

这是我要复制数据的表(稍作修改以减少列数):

Create Table Elements
(
    id              int Identity(0,1)   not null, --PK
    name            varchar(50)         not null,
    modelID         int                 not null, --FK

    constraint PK_Elements primary key (id)
);

这是我的查询:

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是预先声明和设置的。

我不确定我的逻辑是否错误,因此我必须采用其他方法(但是我确信可以这样做)。或者,如果我只是犯了一个错误,那就不能完全把手指放在上面。

任何帮助将不胜感激。

谢谢!

1 个答案:

答案 0 :(得分:0)

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

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”。