web-dev-qa-db-ja.com

SQL Serverでグローバル一時テーブル(## tempTable)を削除する

SQL Serverは、指定された長さの非アクティブ状態の後にこれらを自動的に削除しますか、それとも自動的に削除することを心配する必要がありますか?もしそうなら、どのようにパージするテーブルのリストを照会するのですか?

20
Jeff

SQL Serverへの接続を閉じると、ローカル一時テーブルは破棄されます。通常の状況では、手動でパージする必要はありません。持続的接続または接続プールを維持している場合は、使用後すぐに一時テーブルを削除する習慣を身に付けたいと思うかもしれません。

一方、グローバル一時テーブルは、特定のデータベース内のすべてのユーザーに表示されるため、それらを参照する最後の接続とともに破棄されます。

16
vezult

接続が終了すると一時テーブルが削除されるという事実にもかかわらず、確実にクリーンアップが行われるようにするために、そのようなテーブルを明示的に削除することは依然として良い習慣であると考えられています。

たとえば、プラットフォームが接続プールを利用している場合、つまり接続が切断されない場合、一時テーブルもまだ存在しますか?

一時テーブルの存在を確認するには、次のステートメント/チェックを使用できます。

if object_id('tempdb..##temptbl') is not null
begin
    drop table ##temptbl
end
26
John Sansom

質問の2番目の部分に答えて、パージするテーブルのリストをクエリするには、次のクエリを試してください。

SELECT * FROM tempdb..sysobjects

これにより、現在のすべてのグローバル一時テーブルが一覧表示されます

4
PaulStock