166

SQL Server のローカル一時テーブルとグローバル一時テーブルの違いは何ですか?

4

7 に答える 7

363
  • テーブル変数( DECLARE @t TABLE) は、それを作成した接続にのみ表示され、バッチまたはストアド プロシージャが終了すると削除されます。

  • ローカル一時テーブル( CREATE TABLE #t) は、それを作成した接続にのみ表示され、接続が閉じられると削除されます。

  • グローバル一時テーブル( CREATE TABLE ##t) は誰でも見ることができ、それらを参照したすべての接続が閉じると削除されます。

  • Tempdb 永続テーブル( USE tempdb CREATE TABLE t) は誰でも見ることができ、サーバーの再起動時に削除されます。

于 2010-05-27T12:34:28.807 に答える
119

この説明は非常に明確です(これはTechnetからの純粋なコピーです):

一時テーブルには、ローカルとグローバルの 2 種類があります。ローカル一時テーブルは、テーブルが最初に作成または参照されたときと同じように SQL Server のインスタンスに接続している間、その作成者にのみ表示されます。ユーザーが SQL Server のインスタンスから切断すると、ローカルの一時テーブルが削除されます。グローバル一時テーブルは、作成後にすべてのユーザーとすべての接続に表示され、テーブルを参照しているすべてのユーザーが SQL Server のインスタンスから切断されると削除されます。

于 2010-05-27T12:06:17.040 に答える
12

Books Online からの引用:

ローカル一時テーブルは、現在のセッションでのみ表示されます。グローバル一時テーブルはすべてのセッションに表示されます。

DROP TABLE を使用して明示的に削除しない限り、一時テーブルはスコープ外になると自動的に削除されます。

  • ストアド プロシージャで作成されたローカル一時テーブルは、ストアド プロシージャが完了すると自動的に削除されます。このテーブルは、そのテーブルを作成したストアド プロシージャによって実行されるネストされたストアド プロシージャから参照できます。テーブルを作成したストアド プロシージャを呼び出したプロセスは、テーブルを参照できません。
  • 他のすべてのローカル一時テーブルは、現在のセッションの終了時に自動的に削除されます。
  • テーブルを作成したセッションが終了し、他のすべてのタスクがそれらの参照を停止すると、グローバル一時テーブルは自動的に削除されます。タスクとテーブルの間の関連付けは、1 つの Transact-SQL ステートメントが存続している間だけ維持されます。これは、作成セッションの終了時にテーブルをアクティブに参照していた最後の Transact-SQL ステートメントの完了時に、グローバル一時テーブルが削除されることを意味します。
于 2010-05-27T12:06:43.610 に答える