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);

@コマンドを実行すると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バッチ内でコマンド文字列または文字列を実行します

したがって、一時テーブルは、コマンドによって実行されるSQLのスコープ内にのみ存在しますEXECUTE

于 2012-11-16T16:59:45.060 に答える
1

グローバル一時テーブルを作成することもできます。たとえば、##MyTempです。ただし、グローバル一時テーブルはすべてのSQLServer接続に表示されます。

于 2012-11-16T16:45:28.493 に答える