动态创建的临时表不会持久存在

时间:2012-11-16 16:36:02

标签: sql-server sql-server-2008-r2

我想在动态查询中创建一个临时表,然后再使用它。它将从永久表中创建:

create table t (a integer);
insert into t values (1);

临时表创建如下:

declare @command varchar(max) = '
    select *
    into #t
    from t
    ;
    select * from #t;
';
execute (@command);

执行@command时,select from临时表有效。

现在,如果我从临时表中选择,则会显示错误消息:

select * from #t;

Invalid object name '#t'

如果临时表是在动态查询之外创建的,则可以运行:

select top 0 *
into #t
from t

declare @command varchar(max) = '
    insert into #t
    select *
    from t
';
execute (@command);

select * from #t;

是否可以持久保存动态创建的临时表?

2 个答案:

答案 0 :(得分:2)

您接近于假设EXECUTE在不同的会话中执行。

根据MSDN here

  

在Transact-SQL中执行命令字符串或字符串   批次

因此,您的临时表仅存在于EXECUTE命令执行的SQL范围内。

答案 1 :(得分:1)

您还可以创建全局临时表。例如,## MyTemp。 但是,所有SQL Server连接都可以看到全局临时表。