2008-09-04 8 views
1

ストアドプロシージャでは、SQL Server 2005で#Temptableが作成されるとしますか?クエリ実行プランを作成するとき、またはストアドプロシージャを実行するとき?SQL Server 2005一時テーブル

if (@x = 1) 
    begin 
     select 1 as Text into #Temptable 
    end 
else 
    begin 
     select 2 as Text into #Temptable 
    end 

答えて

1

興味深い質問です。

作成しているテンポラリテーブルのタイプについては、ストアドプロシージャが実行されると思います。 #接頭辞を付けて作成されたテーブルは、作成されたSQL Serverセッションからアクセスできます。セッションが終了すると、それらは削除されます。

このURL:http://www.sql-server-performance.com/tips/query_execution_plan_analysis_p1.aspxは、クエリ実行プランの作成時に一時テーブルが作成されないことを示しているようです。

2

セッションが終了すると、実行時に削除されます。

1

セッションの終了時に自動的に削除される可能性がありますが、完了したらテーブルを削除することをお勧めします。

1

また、ライフサイクルが完全に管理されているテーブル変数について検討することもできます。

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は使用しません)。