一時テーブル(#テーブル)を使用する
文書番号: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を実行している場合は試してみるといいかもしれません。
複数のテーブルを外部結合したり UNION や副問い合わせを駆使した複雑なSQLによってデータ抽出をするよりも、 一時テーブルを作成して何度かに分けて INSERT や UPDATE を行い、最後に SELECT をするほうがレスポンスがいいことも多々あります。(ありました。)
なかなか返ってこない複雑なSQLを実行している場合は試してみるといいかもしれません。