【问题标题】:using new columns in the temp table added by alter table not work使用由 alter table 添加的临时表中的新列不起作用
【发布时间】:2019-08-19 11:16:14
【问题描述】:

我有一个问题,新添加的列不能在更多的 cmets 中使用。

我有一个由“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”无效。

【问题讨论】:

    标签: sql-server-2000 alter-table


    【解决方案1】:

    将最后一行替换为

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

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

    【讨论】:

    • 非常感谢。动态 SQL 很好的解决了这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 2019-01-06
    • 1970-01-01
    • 1970-01-01
    • 2011-01-03
    • 2015-02-05
    相关资源
    最近更新 更多