トリガー
テーブルの更新履歴データ等を残したい場合は、トリガを使うのが
一番早い。
■イメージ
・履歴を残したいテーブルの履歴テーブルを作る。
このテーブルのフォーマットは、元テーブルのレイアウト
プラス、追加で残したい任意の情報(更新された日時、UpDateかInsertかDeleteか等)
とするのがよい
■以下のようなトリガを作る
下記トリガの場合、AgreementTableにUpdateが走ると、
変更前の値を持つレコードと変更後の値を持つレコードが生成される。
ALTER TRIGGER [dbo].[trgHistoryAgreementUpdate]
ON [dbo].[Agreement] --どのテーブルに対するトリガか
AFTER UPDATE
AS
BEGIN
DECLARE @ProcessDateTime DATETIME = GETDATE(),
@ProcessAction NVARCHAR(20) ='UPDATE';
INSERT INTO AgreementHistory (
[ProcessAction]
,[ProcessDatetime]
,[ProcessOrder]
,[AgmtId]
,[AgmtStatus]
,[AgmtName]
,[AgmtSei]
,[ZipCode]
,[Todofuken]
,[TodofukenKana]
,[Address1]
,[Address1Kana]
,[Address2]
,[Address2Kana]
,[Address3]
,[CreateUserID]
,[CreateTimeStamp]
,[UpdateUserId]
,[UpdateTimeStamp]
)
SELECT @ProcessAction
,@ProcessDateTime
,1 as ProcessOrder--更新前
,[AgmtId]
,[AgmtStatus]
,[AgmtName]
,[AgmtSei]
,[ZipCode]
,[Todofuken]
,[TodofukenKana]
,[Address1]
,[Address1Kana]
,[Address2]
,[Address2Kana]
,[Address3]
,[CreateUserID]
,[CreateTimeStamp]
,[UpdateUserId]
,[UpdateTimeStamp]
FROM
deleted
UNION ALL
SELECT @ProcessAction
,@ProcessDateTime
,2 as ProcessOrder--更新後
,[AgmtId]
,[AgmtStatus]
,[AgmtName]
,[AgmtSei]
,[ZipCode]
,[Todofuken]
,[TodofukenKana]
,[Address1]
,[Address1Kana]
,[Address2]
,[Address2Kana]
,[Address3]
,[CreateUserID]
,[CreateTimeStamp]
,[UpdateUserId]
,[UpdateTimeStamp]
FROM
inserted
ORDER BY
[AgmtId]