テーブルは作りたくないけど、SQLの実行中だけ一時的に退避させておくテーブルが欲しい、
テーブル内のデータのコピーをとり、コピーで加工がしたい等の永続的ではなく一時的にテーブルを利用したい場合に一時テーブルを利用します。
一時テーブル以外にも変数テーブルもある。・・・が今回は一時テーブルについて書きます。
まずはソースから
-- 一時テーブルの作成 CREATE TABLE #TemporaryTable ( tid INT IDENTITY(1,1) NOT NULL PRIMARY KEY, memo1 VARCHAR(255), memo2 VARCHAR(255) ) -- 一時テーブルにデータを追加 INSERT INTO #TemporaryTable(memo1) values('INSERTED ' + cast(getdate() as varchar(255))) INSERT INTO #TemporaryTable(memo1) values('INSERTED ' + cast(getdate() as varchar(255))) INSERT INTO #TemporaryTable(memo1) values('INSERTED ' + cast(getdate() as varchar(255))) -- 格納域 declare @tid int -- カーソル宣言 declare temp_cursor cursor fast_forward for SELECT tid FROM #TemporaryTable -- カーソルオープン open temp_cursor -- カーソル移動 fetch next from temp_cursor into @tid -- カーソルが読み取れなくなるまで while (@@fetch_status = 0) begin -- 取得したtidでデータ更新 update #TemporaryTable set memo2= '[ ' + cast(@tid as varchar(255)) + ' ] 回目のINSERT結果です。' where tid=@tid -- カーソル移動 fetch next from temp_cursor into @tid end -- カーソルを閉じる close temp_cursor -- カーソルを解放 deallocate temp_cursor -- 追加、更新したテーブルを表示 select * from #TemporaryTable -- 必要なくなった一時テーブルを削除 drop table #TemporaryTable
これをクエリアナライザ等で実行すれば実行されます。
しかもテーブルは残りません。
普通のCREATE TABLEと文法は同様です。唯一違うのはテーブル名の前に”#”が付いていることです。
これはローカル一時テーブルといい、作成した人のみが利用可能です。
よって、セッションを分ければ同名のテーブルが作成可能です。
またセッションがなくなればテーブルも削除されます。
”##”が二つ付いているとグローバル一時テーブルといいます。
この場合は、全部のセッションで共通して利用が可能になります。
よって、他のセッションで作成されている場合は同名のテーブルの作成は不可能です。
アクセスしている全セッションがなくなりますと、テーブルも削除されます。
カーソルに関しましては、declareでカーソルを作成します。
fast_forwardと記載されている箇所は、カーソルの種類を指定してます。
次に、カーソルで開くためのSQL文を記載します。
定義が完了したら、openで開き、fetchで取得し、closeで閉じます。
最後に、deallocateで確保した領域を解放します。