栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

好了,您可以使用编写触发器

CREATE TRIGGER

CREATE TRIGGER **NameOfTheTriggerPlease**…

应该触发该附加操作的表是,

T1
因此应该
ON
将该表定义为触发器:

CREATE TRIGGER T1OnUpdate  **ON T1**…

触发器应该在其上被调用的动作是时间

UPDATE
,而定时是
AFTER
更新,所以…

CREATE TRIGGER T1onUpdateON T1**AFTER UPDATE**…

现在是时候介绍一下触发器的 主体 了,即实际上应该由触发器执行的语句。您用

AS
关键字和后面的语句本身介绍正文。

在您的情况下,将只有一个语句

INSERT
,这是显而易见的。不太明显的是我们将如何访问旧值和新值。现在,SQL
Server为您提供了两个虚拟表
INSERTED
DELETED
,您可以轻松地猜测前者包含所有新值,而后者包含旧值。

这些表与触发器分配给的表具有相同的结构,即

T1
。它们仅包含受
UPDATE
调用触发器的特定语句影响的行,这意味着可能存在多个行。相应地,这意味着您需要在表中具有一些主键或唯一列(或一组列)
T1
,您可以在触发器中使用它来匹配已删除和已插入的行。(实际上,您可能还需要在
T2
表中包含一个引用
T1
的主键的列,以便以后可以确定在哪个行中
T1
存储了哪些值
T2
。)

出于此答案的目的,我将假定在中有一个名为的主键列

PK
和一个同名的外键列
T2
。然后,该
INSERT
语句可能如下所示:

CREATE TRIGGER T1onUpdateON T1AFTER UPDATEAS**INSERT INTO T2 (PK, OldValue, NewValue)SELECT i.PK, i.Value, d.ValueFROM INSERTED i INNER JOIN DELETED d ON i.PK = d.PK**

最后(但并非最不重要)要记住的一件事:整个

CREATE TRIGGER
语句应该是批处理中的唯一语句,即,在
CREATETRIGGER
关键字之前不应有任何语句(但是您可以在其中添加注释),同样,
AS
关键字之后的所有内容都应被考虑触发器主体的一部分(但是
GO
,例如,如果您正在SQL
Server Management Studio中运行脚本,则可以放置定界符以指示语句的结尾)。

有用的读物​​:

  • 创建触发器(Transact-SQL)


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/574901.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号