- Home
- SQL Server
- [SQL Server]一時テーブル(テンポラリテーブル)の作り方
ストアドプロシージャ内で一時的に作ることができる一時テーブル(テンポラリテーブル)について
グローバル一時テーブルとローカル一時テーブル
グローバル一時テーブル
概要
グローバル一時(テンポラリ)テーブルは、セッションが続いている間生きており、セッション内の別のストアドプロシージャからも操作が可能である。
例えばストアドプロシージャAが「グローバル一時テーブルA」を作成した場合。
その後、複数のプログラムがストアドプロシージャAを実行した場合や別のストアドプロシージャBが「グローバル一時テーブルA」を使用している場合、「グローバル一時テーブルA」を使用するストアドプロシージャの実行が全て終わり、セッションが全て無くなったときに「グローバル一時テーブルA」は削除される。
グローバル一時テーブルの作成方法
グローバル一時テーブルの名前は「##」から始まる。
1 2 3 4 5 6 7 8 9 |
-- テーブルの作成 -- テーブルが存在しない場合にのみ作成する IF OBJECT_ID(N'tempdb.dbo.##WorkTable', N'U') IS NULL CREATE TABLE ##WorkTable ( SalesDate Datetime NOT NULL ,ItemCode nvarchar(18) NOT NULL ,Price numeric(7,0) NOT NULL ,Number numeric(5,0) NOT NULL ); |
注意事項
グローバルなので、ストアドプロシージャや動的SQLが実行されるときにもう既にテーブルが存在しているかもしれない。
その場合はエラーとなる。
メッセージ 2714、レベル 16、状態 6、行 2
データベースに ‘##WorkTable’ という名前のオブジェクトが既に存在します。
このエラーを防ぐためにCREATEの前のIF文で存在確認をしておく必要がある。
ローカル一時テーブル
概要
ローカル一時(テンポラリ)テーブルは、それを作成したストアドプロシージャや動的SQLのみアクセスができる。
「ローカル一時テーブルA」を作成する「ストアドプロシージャA」が複数呼び出され実行されても。
それぞれのセッション(ストアドプロシージャA)用の独立した「ローカル一時テーブルA」が作成され、それぞれの作成元の処理が終わるまで生きている。
ローカル一時テーブルの作成方法
ローカル一時テーブルの名前は「#」から始まる。
1 2 3 4 5 6 7 8 9 10 |
-- 既にテーブルがあれば削除しておく IF OBJECT_ID(N'tempdb.dbo.#WorkTable', N'U') IS NOT NULL DROP TABLE #WorkTable ; CREATE TABLE #WorkTable ( SalesDate Datetime NOT NULL ,ItemCode nvarchar(18) NOT NULL ,Price numeric(7,0) NOT NULL ,Number numeric(5,0) NOT NULL ); |
注意事項
ローカル一時テーブルはそれを作成したストアドプロシージャでのみ操作ができる。
残ったままのローカル一時テーブルを再利用することはないため、冒頭の処理でテーブルが存在したら削除して作りなおす必要がある。
コメント
この記事へのトラックバックはありません。
この記事へのコメントはありません。