如何创建触发器来跟踪上次更改的数据

use*_*509 0 sql t-sql sql-server sql-server-2005

CREATE TABLE Member
(
    memberID - PK
    memberName
    dateRegistered - one time process
);

CREATE TABLE MemberLastChanged
(
   memberID 
   memberName
   dateEntered
);
Run Code Online (Sandbox Code Playgroud)

如果用户有任何机会更改其成员名称,我需要在历史表中跟踪当前更改的成员名称。

例如,当前信息是:

会员ID:5534
会员姓名:james

用户将其更改为:

会员ID:5534
会员名称:mark

现在,“Member”将保留当前值:

5534和标记

“MemberLastChanged”将保留:

第5534章


我如何使用触发器在 t-sql 中实现此目的?

gbn*_*gbn 5

CREATE TRIGGER TRG_Member_U ON Member FOR UPDATE
AS
SET NOCOUNT ON

INSERT MemberLastChanged (memberID, memberName)
SELECT
   D.memberID, D.memberName
FROM
   DELETED D JOIN INSERTED I ON D.memberID = I.memberID
WHERE
   D.memberName <> I.memberName
GO
Run Code Online (Sandbox Code Playgroud)

另外,将默认值 GETDATE 添加到 dateRegistered 以便自动记录。

这还会通过比较新值和旧值(INSERTED 与 DELETED)来过滤掉虚拟更新。

INSERTED 和 DELETED 是仅在触发器中可用的特殊表。