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 中实现此目的?
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 是仅在触发器中可用的特殊表。