SQLServer如何创建触发器实现一张表数据更新时,同步增加、删除、修改另一张表的数据
SQLServer如何创建触发器实现⼀张表数据更新时,同步增
加、删除、修改另⼀张表的数据
⼀、触发器知识点摘要:
实际应⽤中,我们经常会遇到在对SQL Server的某⼀张表进⾏增加、删除、修改操作时,需同步更新同⼀数据库或不同数据库的另⼀张表,此时我们可以使⽤SQL Server 的表触发器来实现。
使⽤触发器时,我们会⽤到触发器的两个临时虚拟表:Deleted表、Inserted表,它们⽤于存储【创建触发器表】的记录变动信息,即发⽣触发事件时对应的【⼀条旧记录】和【⼀条新记录】,各触发事件对应表数据如下:
防火电缆桥架表触发事件虚拟表Inserted虚拟表Deleted
新增记录存放新增的记录空
修改记录存放⽤来更新的新记录(新记录)存放更新前的记录(旧记录)
删除记录空存放被删除的记录
举例说明:
修改记录时,触发Update事件,Update的过程可以看作为:复制旧记录到Deleted表、⽣成新的记录到Inserted表,然后删除表记录并写⼊新纪录。
⼆、如何创建触发器:
以SQL Server2008R2为基础,在【数据库A.dbo.表TA】表发⽣变化时,同步触发【数据库B.dbo.表TB】例,两张表结构如下图:
创建触发器步骤如下:
1、打开SQL Server企业管理器【SQL Server Management Studio】-展开【数据库】⾄需创建触发器的表,如下图⽰例中的【数据库A】.【表TA】-右键单击【触发器】-【新建触发器】,如下图:
2、右侧查询分析器窗⼝输⼊以下⽰例代码,创建UPDATE、INSERT事件触发器:
USE [A]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER [dbo].[Empty_Update] --⾸次创建CREATE,后续修改ALTER:更新、新增触发器
ON  [dbo].[TA] ----在TA表中创建触发器
AFTER INSERT,UPDATE --更新、新增事件触发
AS --执⾏SQL语句
DECLARE @PerID AS int --定义变量
SELECT @PerID=id FROM inserted --变量赋值:临时表inserted中存放的新id
IF EXISTS(SELECT id_b FROM B..TB WHERE B..TB.id_b=@PerID) --如果记录已存在,执⾏UPDATE操作BEGIN
UPDATE B..TB SET
B..TB.code_b=code,
B..TB.name_b=name
FROM inserted WHERE B..TB.id_b=@PerID
END
五星大饭店续集小说
ELSE IF @PerID IS NOT NULL --如果记录不存在且id不为空,执⾏INSERT操作
钢筋多少钱一吨2021年价格表BEGIN
SET IDENTITY_INSERT B..TB ON --允许主键插⼊显式值
INSERT INTO B..TB(
id_b,code_b,name_b
)SELECT
id,code,name
FROM inserted
SET IDENTITY_INSERT B..TB OFF --禁⽌主键插⼊显式值
END
注:⾸次创建触发器时必须使⽤CREATE命令,以后如需对触发器进⾏修改,需将 CREATE 修改为:ALTER。
3、触发器编写完成后,点击【√分析】,语法⽆误后再点击【执⾏】,如下图:
4、成功【执⾏】后,将在[a].[dbo].[TA]触发器下CREATE⼀个名称为[Empty_Update]的触发器,如下图:
5、重复步骤1,在右侧查询分析器窗⼝输⼊以下⽰例代码,创建DELETE事件触发器:
USE [A]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
彭冠英个人资料简介GO
CREATE TRIGGER [dbo].[Empty_Delete] --⾸次创建CREATE,后续修改ALTER:删除触发器
ON  [dbo].[TA] ----在TA表中创建触发器
AFTER DELETE --删除事件触发
AS --执⾏SQL语句
DECLARE @DelID AS int --定义变量
SELECT @DelID=id FROM Deleted --变量赋值:临时表Deleted中存放的被删除id
IF @DelID IS NOT NULL --如果删除id不为空,执⾏DELETE操作
BEGIN
DELETE FROM B..TB WHERE B..TB.id_b =@DelID
END
电脑死机怎么办6、成功执⾏后,将在[a].[dbo].[TA]触发器下再次CREATE⼀个名称为[Empty_Delete]的触发器。
注意事项:
豪宅税
在Microsoft SQL Server Management Studio 企业管理器中,通过【导⼊数据】向导从其他表或EXCEL中导⼊数据时,触发器不触发。
扩展阅读:
触发器的⼯作原理:
触发器是⼀种特殊类型的存储过程,它与表紧密联系在⼀起,在对表进⾏插⼊、删除和更新时,如该表(也称触发器表)有相应操作类型的触发器,则触发器便会⾃动触发执⾏。触发器分为INSERT触发器、DELETE触发器和UPDATE触发器3类。当向触发器表中插⼊数据时,INSERT触发器将触发执⾏,新的记录会增加到触发器表和inseted表中;当删除触发器表中的数据时,DELETE触发器将触发执⾏,被删除的记录会存放到deleted表中;当更新触发器表中的数据时,相当于插⼊⼀条新记录和删除⼀条旧记录,此时UPDATE触发器将触发执⾏,表中原有的记录存放到deleted表中,修改后的记录插⼊到inserted表中。其中inserted表和deleted表是两个逻辑表,由系统来维护,不允许⽤户直接对这两个表进⾏修改。它们存放于内存中,不存放在数据库中。这两个表的结构总是与被该触发器作⽤的表的结构相同。触发器⼯作完成后,与该触发器相关的这两个表也会被删除。deleted表⽤于存储SQL语⾔中DELETE和UPDATE语句所影响的⾏的复本。在执⾏DELETE或 UPDATE语句时,⾏从触发器表中删除,并传输到 deleted 表中。deleted 表和触发器表通常没有相同的⾏;inserted 表⽤于存储 SQL语⾔中INSERT 和 UPDATE 语句所影响的⾏的副本。在⼀个插⼊或更新事务处理中,新建⾏被同时添加到 inserted 表和触发器表中。inserted 表中的⾏是触发器表中新⾏的副本。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。