gpt4 book ai didi

sql - 创建一个触发器,它将在更新另一个表时将记录插入表中

转载 作者:行者123 更新时间:2023-12-02 06:39:36 26 4
gpt4 key购买 nike

假设我有表 T1 和 T2

Columns of T1 -->Value
Columns of T2 -->OldValue NewValue

我需要的是一个触发器,它将在 T1 更新时在 T2 中插入一条记录,我还需要知道旧值和新值,我以前从未使用过触发器,所以有什么可以帮助我的,怎么做我着手创建此触发器。是否可能,谢谢。

最佳答案

那么,您开始使用 CREATE TRIGGER 编写触发器:

CREATE TRIGGER <b>NameOfTheTriggerPlease</b>

应触发附加操作的表是 T1所以应该定义触发器 ON那张 table :

CREATE TRIGGER T1OnUpdate  /* that's just an example,
you can use a different name */
<b>ON T1</b>

应该调用触发器的操作是 UPDATE时间是AFTER更新,所以……

CREATE TRIGGER T1OnUpdate
ON T1
<b>AFTER UPDATE</b>

现在是介绍触发器的主体的时候了,即应该由触发器实际执行的语句。你用AS介绍 body 关键字后跟语句本身。

在您的情况下,只有一个语句,INSERT ,这是显而易见的。不太明显的是我们将如何访问旧值和新值。现在,SQL Server 为您提供了两个虚拟表,INSERTEDDELETED , 你可以很容易地猜到前者包含所有新值而后者包含旧值。

这些表与触发器分配给的表具有相同的结构,即 T1 .它们只包含受特定 UPDATE 影响的行调用触发器的语句,这意味着可能有多个。反过来,这意味着您需要在 T1 中有一些主键或唯一列(或一组列)。您可以在触发器中使用该表来匹配已删除和已插入的行。 (事实上​​ ,您可能还需要您的 T2 表有一个引用 T1 的主键的列,以便您稍后可以确定 T1 的哪一行具有哪些值存储在 T2 中。)

出于此答案的目的,我将假设有一个名为 PK 的主键列和 T2 中的同名外键列.和 INSERT语句可能如下所示:

CREATE TRIGGER T1OnUpdate
ON T1
AFTER UPDATE
AS
<b>INSERT INTO T2 (PK, OldValue, NewValue)
SELECT i.PK, i.Value, d.Value
FROM INSERTED i INNER JOIN DELETED d ON i.PK = d.PK</b>

最后(但并非最不重要)的事情要记住:整个 CREATE TRIGGER语句应该是批处理中唯一的一个,即 CREATE TRIGGER 之前不应有语句关键字(但您可以在此处添加注释)以及 AS 之后的所有内容关键字被视为触发器正文的一部分(但是,如果您在 SQL Server Management Studio 中运行脚本,则可以放置 GO 分隔符来指示语句的结尾)。

有用的阅读:

关于sql - 创建一个触发器,它将在更新另一个表时将记录插入表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10648983/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com