我有一个问题,新添加的列无法在进一步的注释中使用。
我有一个通过“ 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”。
答案 0 :(得分:0)
将最后一行替换为
EXECUTE sp_executesql N'select id,name,val from #tmp_tb';
实际上,解析器尚不知道新列。通过将其传递给sp_executesql可以避免这种情况。