Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 动态创建的临时表不会持久化_Sql Server_Sql Server 2008 R2 - Fatal编程技术网

Sql server 动态创建的临时表不会持久化

Sql server 动态创建的临时表不会持久化,sql-server,sql-server-2008-r2,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); 当执行@命令时,从临时表中选择将起作用 现在,如果我从临

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

create table t (a integer);
insert into t values (1);
临时表的创建如下所示:

declare @command varchar(max) = '
    select *
    into #t
    from t
    ;
    select * from #t;
';
execute (@command);
当执行@命令时,从临时表中选择将起作用

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

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;

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

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

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

您几乎可以假设执行是在不同的会话中执行的

根据MSDN

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


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

您几乎可以假设EXECUTE是在不同的会话中执行的

根据MSDN

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


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

我已经测试过,它可以正常工作。所以我想问题在于动态查询是在不同的会话中执行的,还是类似的?顺便说一句,我不会使用全局临时程序。在某些过程中,我会将它们与所有stringcoded执行一起使用,这里的表名是从新的\u ID生成的。我不喜欢这样,但有一些长时间运行的复杂过程的特殊情况。我测试过,它可以工作。所以我想问题在于动态查询是在不同的会话中执行的,还是类似的?顺便说一句,我不会使用全局临时程序。在某些过程中,我将它们与所有stringcoded执行一起使用,这里的表名是从新的\u ID生成的。我不喜欢这样,但有一些长时间运行的复杂过程的特殊情况。这是因为事务在不同的会话中执行,而不是因为事务本身吗?全局临时文件在事务中生存。A好的,所有的东西都应该在同一个会话中执行,为什么全局临时文件在事务中生存我不知道,但是如果executesql是事务包装的,它们就无法生存:您需要在本地运行它,这是因为事务在不同的会话中执行,而不是因为事务本身?全局临时在事务中生存。AFAIK所有内容都应该在同一个会话中执行,为什么全局临时在事务中生存?我不知道,但是如果执行SQL是事务包装的,它们就不能生存:您需要在本地运行它