SQL Server のローカル一時テーブルとグローバル一時テーブルの違いは何ですか?
7 に答える
テーブル変数(
DECLARE @t TABLE
) は、それを作成した接続にのみ表示され、バッチまたはストアド プロシージャが終了すると削除されます。ローカル一時テーブル(
CREATE TABLE #t
) は、それを作成した接続にのみ表示され、接続が閉じられると削除されます。グローバル一時テーブル(
CREATE TABLE ##t
) は誰でも見ることができ、それらを参照したすべての接続が閉じると削除されます。Tempdb 永続テーブル(
USE tempdb CREATE TABLE t
) は誰でも見ることができ、サーバーの再起動時に削除されます。
この説明は非常に明確です(これはTechnetからの純粋なコピーです):
一時テーブルには、ローカルとグローバルの 2 種類があります。ローカル一時テーブルは、テーブルが最初に作成または参照されたときと同じように SQL Server のインスタンスに接続している間、その作成者にのみ表示されます。ユーザーが SQL Server のインスタンスから切断すると、ローカルの一時テーブルが削除されます。グローバル一時テーブルは、作成後にすべてのユーザーとすべての接続に表示され、テーブルを参照しているすべてのユーザーが SQL Server のインスタンスから切断されると削除されます。
Books Online からの引用:
ローカル一時テーブルは、現在のセッションでのみ表示されます。グローバル一時テーブルはすべてのセッションに表示されます。
DROP TABLE を使用して明示的に削除しない限り、一時テーブルはスコープ外になると自動的に削除されます。
- ストアド プロシージャで作成されたローカル一時テーブルは、ストアド プロシージャが完了すると自動的に削除されます。このテーブルは、そのテーブルを作成したストアド プロシージャによって実行されるネストされたストアド プロシージャから参照できます。テーブルを作成したストアド プロシージャを呼び出したプロセスは、テーブルを参照できません。
- 他のすべてのローカル一時テーブルは、現在のセッションの終了時に自動的に削除されます。
- テーブルを作成したセッションが終了し、他のすべてのタスクがそれらの参照を停止すると、グローバル一時テーブルは自動的に削除されます。タスクとテーブルの間の関連付けは、1 つの Transact-SQL ステートメントが存続している間だけ維持されます。これは、作成セッションの終了時にテーブルをアクティブに参照していた最後の Transact-SQL ステートメントの完了時に、グローバル一時テーブルが削除されることを意味します。