ストアド プロシージャでは、SQL Server 2005 で #Temptable が作成されるのはいつですか? クエリ実行プランを作成するとき、またはストアド プロシージャを実行するときは?
if (@x = 1)
begin
select 1 as Text into #Temptable
end
else
begin
select 2 as Text into #Temptable
end
ストアド プロシージャでは、SQL Server 2005 で #Temptable が作成されるのはいつですか? クエリ実行プランを作成するとき、またはストアド プロシージャを実行するときは?
if (@x = 1)
begin
select 1 as Text into #Temptable
end
else
begin
select 2 as Text into #Temptable
end
実行時に作成され、セッションの終了時に削除されます。
また、ライフサイクルが完全に管理されているテーブル変数を検討することもできます。
DECLARE @MyTable TABLE (MyPK INT IDENTITY, MyName VARCHAR(100))
INSERT INTO @MyTable ( MyName ) VALUES ( 'Icarus' )
INSERT INTO @MyTable ( MyName ) VALUES ( 'Daedalus' )
SELECT * FROM @MyTable
私はほぼ常にこの方法を使用していますが、欠点もあります。最も注目すべきは、TABLE() コンストラクト内で宣言できるインデックスのみを使用できることです。これは、基本的に主キーのみに制限されていることを意味し、ALTER TABLE を使用する必要はありません。
興味深い質問です。
作成している一時テーブルのタイプについては、ストアド プロシージャが実行されたときだと思います。# プレフィックスで作成されたテーブルは、それらが作成された SQL Server セッションからアクセスできます。セッションが終了すると、テーブルは削除されます。
この URL: http://www.sql-server-performance.com/tips/query_execution_plan_analysis_p1.aspxは、クエリ実行プランの作成時に一時テーブルが作成されていないことを示しているようです。
セッションの終了時に自動的に削除される場合がありますが、使用が終了したら自分でテーブルを削除することをお勧めします。