トリガー

テーブルの更新履歴データ等を残したい場合は、トリガを使うのが

一番早い。

■イメージ

 ・履歴を残したいテーブルの履歴テーブルを作る。

  このテーブルのフォーマットは、元テーブルのレイアウト

  プラス、追加で残したい任意の情報(更新された日時、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]