在alter table添加的临时表中使用新列不起作用

问题描述 投票:0回答:1

我有一个问题,新添加的列不能用于进一步的注释。

我有一个由“select into”构建的临时表,然后我需要通过“alter table”添加一个标识列。但是当我想在“join”中使用新列时,我收到错误“Invalid column”。请注意,这些命令可以单独工作。

我认为原因是,编译器找不到新列,并且在运行它之前会出错。有解决方案吗?

我在sql server 2000中遇到了这个问题,它似乎在较新的版本中,问题不在那里。

create table #tmp_tb
(name varchar(4), val int)
insert into #tmp_tb values('ab',1);
insert into #tmp_tb values('abc',2);
select * from #tmp_tb
alter table #tmp_tb add id int NOT NULL IDENTITY(1,1);
select * from #tmp_tb
select id,name,val from #tmp_tb

发生错误:

消息207,级别16,状态3,行9无效的列名称“id”。

sql-server-2000 alter-table
1个回答
0
投票

用最后一行替换

EXECUTE sp_executesql N'select id,name,val from #tmp_tb';

实际上,解析器还不知道新列。通过sp_executesql传递它可以避免这种情况。

© www.soinside.com 2019 - 2024. All rights reserved.