--------(--)

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
2013-09-13(Fri)

SQL Server の OUTPUT句

あるテーブルにレコードの追加、更新、削除を行ったときに、ログテーブルに履歴を残す処理を行いたいと思いました。
この、あるテーブルはIdentity列が主キーとなっており、自動的に発番された主キーの値をどう取得しようかと思っていたのですが、いろいろ調べてみるとSQL Server 2005以降であればOUTPUT句なるものがあり、これが便利に使えそうなので早速テストしてみました。

------------------------------------------------
あるテーブル:[DAT]
 列[ID]:int、identity、主キー
 列[NAME]:nvarchar

ログテーブル:[LOG]
 列[ID]:int
 列[KUBUN]:nvarchar
------------------------------------------------


上記のあるテーブルを更新した記録をログテーブルに残すと仮定します。

------------------------------------------------
レコード追加
------------------------------------------------
INSERT INTO DAT (NAME)
OUTPUT INSERTED.ID, '追加'
INTO LOG (ID, KUBUN)
VALUES ('青木')


------------------------------------------------
レコード更新
------------------------------------------------
UPDATE DAT
SET NAME = '笹木'
OUTPUT INSERTED.ID, '更新'
INTO LOG (ID, KUBUN)
WHERE ID = 1


------------------------------------------------
レコード削除
------------------------------------------------
DELETE FROM DAT
OUTPUT DELETED.ID, '削除'
INTO LOG (ID, KUBUN)
WHERE ID = 2


これだけで、あるテーブルを更新すると同時にログテーブルに履歴を残すことが出来ます。
追加や更新したIdentity列の値はINSERTED.[列名]、削除したIdentity列の値はDELETED.[列名]で取得できました。
SQL Server 2005以降の環境限定ですが、非常に便利だと感じました。

コメントの投稿

管理者にだけ表示を許可する

コメント



 
プロフィール
Author:OMEGAT
FC2ブログへようこそ!
カレンダー
05 | 2017/06 | 07
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -
FC2カウンター
最新記事
最新コメント
最新トラックバック
月別アーカイブ
忍者AdMax
検索フォーム
カテゴリ
ブロとも申請フォーム

この人とブロともになる

amazonお奨め商品



上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。