SQLServerでレコード更新内容を参照する
レコードの追加・更新・削除の内容をTransact-SQLで参照する方法を紹介します。
コーディング例
BEGIN
-- テーブルの準備
CREATE TABLE #WORK(
[ID] INT IDENTITY(1,1) NOT NULL PRIMARY KEY
,[NAME] NVARCHAR(10) NOT NULL
)
INSERT INTO #WORK
VALUES
('やまだ')
,('さとう')
,('たなか')
;
-- 更新結果テーブル作成
CREATE TABLE #RESULT(
[SEQ] INT IDENTITY(1,1)
,[ACTION] NCHAR(3)
,[BEFORE_ID] INT
,[BEFORE_NAME] NVARCHAR(10)
,[AFTER_ID] INT
,[AFTER_NAME] NVARCHAR(10)
);
-- データ追加
INSERT INTO #WORK
OUTPUT
'INS'
,INSERTED.*
INTO
#RESULT(
[ACTION]
,[AFTER_ID]
,[AFTER_NAME]
)
VALUES
('やまもと')
,('なかた');
;
-- データ更新
UPDATE #WORK
SET [NAME] = '山田'
OUTPUT
'UPD'
,DELETED.*
,INSERTED.*
INTO
#RESULT(
[ACTION]
,[BEFORE_ID]
,[BEFORE_NAME]
,[AFTER_ID]
,[AFTER_NAME]
)
WHERE
[NAME] = 'やまだ'
;
-- データ削除
DELETE FROM #WORK
OUTPUT
'DEL'
,DELETED.*
INTO
#RESULT(
[ACTION]
,[BEFORE_ID]
,[BEFORE_NAME]
)
WHERE
[NAME] = 'さとう'
;
-- 更新結果
SELECT * FROM #RESULT;
-- 後片付け
DROP TABLE #WORK;
DROP TABLE #RESULT;
END
実行結果
| SEQ | ACTION | BEFORE_ID | BEFORE_NAME | AFTER_ID | AFTER_NAME |
|---|---|---|---|---|---|
| 1 | INS | NULL | NULL | 4 | やまもと |
| 2 | INS | NULL | NULL | 5 | なかた |
| 3 | UPD | 1 | やまだ | 1 | 山田 |
| 4 | DEL | 2 | さとう | NULL | NULL |
更新中のデータをOUTPUT句で出力し、INTO句でそのデータをテーブルへ追加することができます。
INSERTEDテーブルとDELETEDテーブルはトリガーで使用するものと同じで、INSERT文の場合はINSERTEDテーブルに追加したレコードが格納されます。
UPDATE文の場合はDELETEDテーブルに更新前のレコード、INSERTEDテーブルに更新後のレコードが格納されます。
DELETE文の場合はDELETEDテーブルに削除前のレコードが格納されます。
以上、「SQLServerでレコード更新内容を参照する」の紹介でした。







