ストアドプロシージャでは、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
ストアドプロシージャでは、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
興味深い質問です。
作成しているテンポラリテーブルのタイプについては、ストアドプロシージャが実行されると思います。 #接頭辞を付けて作成されたテーブルは、作成されたSQL Serverセッションからアクセスできます。セッションが終了すると、それらは削除されます。
このURL:http://www.sql-server-performance.com/tips/query_execution_plan_analysis_p1.aspxは、クエリ実行プランの作成時に一時テーブルが作成されないことを示しているようです。
セッションが終了すると、実行時に削除されます。
セッションの終了時に自動的に削除される可能性がありますが、完了したらテーブルを削除することをお勧めします。
また、ライフサイクルが完全に管理されているテーブル変数について検討することもできます。
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は使用しません)。