SQL Serverで一時テーブルを作成する場合、ローカルまたはグローバルの一時テーブルにするオプションがあります。
ローカル一時テーブルとグローバル一時テーブルの主な違いの概要は次のとおりです。
ネーミング
- ローカル一時テーブルの名前は、単一の番号記号(
#
)で始まります )。例:#MyTable
。 - ローカル一時テーブルには、システムで生成された数値のサフィックスが名前に追加されます。これはSQLServerによって自動的に生成されます。これにより、複数のセッションで、名前の競合を発生させることなく、同じ名前のローカル一時テーブルを作成できます。ただし、ユーザーはサフィックスを知らなくてもテーブルをクエリできます。
- グローバル一時テーブルの名前は、二重番号記号(
##
)で始まります )。例:##MyTable
。 - グローバル一時テーブルはではありません ローカル一時テーブルのように接尾辞が追加されます。
可視性
- ローカル一時テーブルは、現在のセッションでのみ表示されます。
- グローバル一時テーブルはすべてのセッションに表示されます。
寿命
- ローカル一時テーブルは、現在のセッションの終了時に自動的に削除されます。ストアドプロシージャで作成されたローカル一時テーブルは、ストアドプロシージャが終了すると自動的に削除されます。テーブルは、テーブルを作成したストアドプロシージャによって実行されるネストされたストアドプロシージャから参照できます。テーブルを作成したストアドプロシージャを呼び出したプロセスがテーブルを参照することはできません。
- グローバル一時テーブルは、テーブルを作成したセッションが終了し、他のすべてのタスクがそれらの参照を停止すると、自動的に削除されます。タスクとテーブルの間の関連付けは、単一のT-SQLステートメントの存続期間中のみ維持されます。したがって、グローバル一時テーブルは、作成セッションの終了時にテーブルをアクティブに参照していた最後のT-SQLステートメントの完了時に削除されます。