0

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

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;

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

4

2 回答 2

2

EXECUTE您很接近在不同会话中进行的假设。

根据这里的 MSDN

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

所以你的临时表只存在于EXECUTE命令执行的 SQL 范围内。

于 2012-11-16T16:59:45.060 回答
1

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

于 2012-11-16T16:45:28.493 回答