使用由alter table添加的temp表中的新列不起作用

时间:2019-03-28 15:45:53

标签: sql-server-2000 alter-table

我有一个问题,新添加的列无法在进一步的注释中使用。

我有一个通过“ select into”构建的临时表,然后我需要通过“ alter table”添加一个标识列。但是,当我想在“联接”中使用新列时,出现错误“无效列”。请注意,这些命令可以单独使用。

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

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

1 个答案:

答案 0 :(得分:0)

将最后一行替换为

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

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