当前位置: 首页 > 面试题库 >

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

毕霖
2023-03-14
问题内容
CREATE TABLE Member
(
    memberID - PK
    memberName
    dateRegistered - one time process
);

CREATE TABLE MemberLastChanged
(
   memberID 
   memberName
   dateEntered
);

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

例如,当前信息是:

会员编号:5534会员姓名
:james

用户将其更改为:

会员编号:5534会员名称
:标记

到现在为止,“成员”将保留当前值:

5534和标记

“ MemberLastChanged”将保持:

5534和詹姆斯

如何使用触发器在T-SQL中实现此目标?


问题答案:

您创建一个UPDATE触发器-触发器可以访问两个逻辑表,这些逻辑表的结构与其在其上定义的表相同:

  • 插入,这是要放入表中的新数据
  • DELETED,这是表中的旧数据

见这对使用这些逻辑表MDSN文章。

使用此数据,您可以填充历史记录表。

CREATE TRIGGER trg_Member_MemberUpdate
ON dbo.Member AFTER UPDATE
AS
    INSERT INTO dbo.MemberLastChanged(memberID, memberName)
    SELECT d.MemberID, d.MemberName
    FROM DELETED d


 类似资料:
  • 问题内容: 我似乎无法创建触发器。我已经尝试了以下两种方式进行更新。我通过插入语句不断收到语法错误。我搜索了过去4个小时的论坛和网络搜索,没有任何变化。对此还有更多代码,它基本上会重复执行。任何帮助,将不胜感激。谢谢你。我正在运行MySQL 5.0,并通过phpMyAdmin 2.8.2.4作为Administrator / Root访问。 TRY 1(在所有字段和名称上带有和不带有qoutes)

  • 本文向大家介绍MySQL如何创建触发器,包括了MySQL如何创建触发器的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了MySQL创建触发器的具体代码,供大家参考,具体内容如下 先来个实例: 实例解析:   先创建触发器中待存储的表t_attendance   DELIMITER $   意思是告诉mysql下文执行语句以“$”结束,如果没有这句,下面语句会出错,mysql无法判断哪句

  • 问题内容: 我的同事在工作中提出了一个我无法回答的问题(由于缺乏经验),该问题与跟踪表中相关字段的变化有关。 想象一下,我们有3个表,每个表20个字段。在此示例中,我们考虑这些表中的每一个都有2个字段,一个名为LastUpdatedOn,另一个名为LastUpdatedBy。 如果我们只想跟踪这3个表中的更改,而只跟踪几个特定字段,而没有为每个表创建包含更新前最新版本的历史表,那么我们如何跟踪这些

  • 我尝试记录JPA实体的任何更改。因此,每个实体都继承自一个抽象实体类,该类具有日志条目对象列表。 AbstractEntity类: LogEntry类: 我的方法是创建一个新的LogEntry对象,并在实体更新或持久化之前将其添加到实体的LogEntry列表中。 我尝试了以下解决方案: 几乎所有这些试验都使我能够更改受影响实体的属性(如名称或validTo)。但没有任何解决方案提供创建新LogEn

  • 问题内容: 嘿,我感动了一下代码,@Sam_M给了我。 我试图基本上跟踪多个手指在移动时的位置。就像手指1在这里,手指2在这里。因此,截至目前,它将打印视图上当前的手指/触摸数和位置,但不会分别跟踪两个手指。Ive环顾了stackoverflow上仅有的其他3个问题。但是没有人给我一个很好的结果,我可以迅速实现。 } 问题答案: 每个手指的触摸对象在屏幕上时,具有相同的内存地址将保持不变。您可以通

  • 问题内容: 更新 :Intellij IDEA的最新版本完全实现了我想要的功能。问题是如何在IDE外部实现此功能(以便我可以将异步堆栈跟踪信息转储到日志文件中),理想情况下无需使用检测代理。 自从我将应用程序从同步模型转换为异步模型以来,调试故障一直遇到问题。 当我使用同步API时,我总是在异常stacktraces中找到我的类,因此我知道从哪里开始寻找问题。使用异步API,我得到的堆栈跟踪既不引