HOME >> Tips >> SQL Server Tips >> SQL

一時テーブル(#テーブル)を使用する

 
文書番号:20341




ストアドプロシージャなどT-SQL ステートメント中に一時的にテーブルを使用したいことがあります。

実際にテーブルを作成して操作するにはそのセッション番号などをキー項目にするなどの工夫をする必要がありますが、 SQL Server では一時テーブルを使用するとそのような配慮は必要なくなります。

一時テーブルには以下の2種類があります。

  • ローカル一時テーブル
    作成したユーザーだけが使用できるテーブルです。
    ユーザーがセッションを切断すると削除されます。
  • グローバル一時テーブル
    すべてのユーザーが使用できるテーブルです。
    一時テーブルを参照するすべてのユーザーのセッションが切断されると削除されます。

  • ※一時テーブルは「tempdb」内に作成され、システムが暗黙的に削除します。

【実行手順】

  • ローカル一時テーブルを作成する場合はテーブル名の先頭に「#」をつけます。
    文法:CREATE TABLE #テーブル名(・・・
    
    CREATE TABLE #WORK_DATA(
         COL1 varchar(10)
        ,COL2 varchar(10)
    )
    
  • グローバル一時テーブルを作成する場合はテーブル名の先頭に「##」をつけます。
    文法:CREATE TABLE ##テーブル名(・・・
    
    CREATE TABLE ##WORK_DATA(
         COL1 varchar(10)
        ,COL2 varchar(10)
    )
    
一時テーブルを作成する負荷(コスト)はそれほど高くありません。

複数のテーブルを外部結合したり UNION や副問い合わせを駆使した複雑なSQLによってデータ抽出をするよりも、 一時テーブルを作成して何度かに分けて INSERT や UPDATE を行い、最後に SELECT をするほうがレスポンスがいいことも多々あります。(ありました。)

なかなか返ってこない複雑なSQLを実行している場合は試してみるといいかもしれません。