SQL Server 入門 SQL Server 入門

T-SQL: テンポラリテーブル(一時テーブル)の存在確認と削除

ホーム > 便利なT-SQL&クエリー集 > T-SQL: テンポラリテーブル(一時テーブル)の存在確認と削除

テンポラリテーブル(一時テーブル)とは?

テンポラリーテーブルはその名の通り、一時的に作って参照できるテーブルで、名前が # から始まるローカルテンポラリテーブルと、名前が ## から始まるグローバルテンポラリテーブルがあります。

テーブルの作り方は普通のテーブルと同じで、tempdb に作られます。


ローカルテンポラリテーブル(一時テーブル)は、現在のセッション上のみから参照可能で、グローバルテンポラリテーブルはどのセッションからでも参照可能です。

例えば、ストアドプロシジャーA でローカル一時テーブルを作り、AがストアドプロシジャーBを実行するような場合、B 内でAで作ったローカル一時テーブルでも参照可能です。

※ 呼ばれた側(B 内)で作ったローカル一時テーブルは A で参照することはできません。


ローカル一時テーブルの場合、同時に上記のストアドプロシジャーA が複数のセッションから実行されても、それぞれ区別がつくように、実際には SQL Server が名前の後ろにユニークになるように数字などを追加します。

テンポラリテーブル(一時テーブル)の存在確認と削除 1

テンポラリテーブル(一時テーブル)の存在確認と削除 2


ローカルテンポラリテーブルはスコープをはずれると自動的に削除され、グローバルテンポラリテーブルはそれを作ったセッションが終わって、その他参照しているタスクが参照を終えた時点で自動的に削除されます。

明示的に DROP TABLE することも可能で、DROP TABLE するべきかどうかはいろいろな意見があるようですが、私はもう必要がなくなったら、すぐに DROP TABLE しています。


テンポラリテーブル(一時テーブル)の存在確認と削除

テンポラリテーブル(一時テーブル)が存在するかどうかを確認して、存在する場合は削除したいようなケースがあるかもしれません。

そんな時には以下のクエリーでテンポラリテーブル(一時テーブル)の存在確認と削除が可能です。

IF OBJECT_ID(N'tempdb..#TestLocalTempTable', N'U') IS NOT NULL
DROP TABLE #TestLocalTempTable;

OBJECT_ID() は指定したオブジェクト名のオブジェクトID 番号を返すファンクションで、指定したオブジェクトが存在しなければNULL を返します。

第一引数はオブジェクト名、第二引数はオブジェクトタイプで U はテーブル (ユーザー定義) です。

ですので、#TestLocalTempTable が存在する場合は条件式が TRUE となり、DROP TABLE が実行されます。

SQL Server 関連のおすすめ書籍
ホーム > 便利なT-SQL&クエリー集 > T-SQL: テンポラリテーブル(一時テーブル)の存在確認と削除