IT培训-高端面授IT培训机构
云和教育:云和数据集团高端IT职业教育品牌
  • 国家级
    全民数字素养与技能培训基地
  • 河南省
    第一批产教融合型企业建设培育单位
  • 郑州市
    数字技能人才(码农)培养评价联盟

Sql Server 触发器实现多表之间同步增加、删除与更新

  • 发布时间:
    2016-10-12
  • 版权所有:
    云和教育
  • 分享:

Sql Server 触发器实现多表之间同步增加、删除与更新

定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序。触发器是一个特殊的存储过程。

常见的触发器有三种:分别应用于Insert , Update , Delete 事件。(SQL Server 2000定义了新的触发器,这里不提)

我为什么要使用触发器?比如,这么两个表:

Create Table Student(             –学生表

StudentID int primary key,      –学号

….

)

Create Table BorrowRecord(              –学生借书记录表

BorrowRecord  int identity(1,1),      –流水号

StudentID     int ,                   –学号

BorrowDate    datetime,               –借出时间

ReturnDAte    Datetime,               –归还时间

)

分别创建增加、删除、更新的触发器(Trigger)来达到两张表之间数据同步的目的。

1:数据同步增加:

如有两张表——A表和B表,创建触发器使当A表插入数据后B表也同步插入数据。其中B表插入数据的字段需要同A表中的字段相对应。

CREATE TRIGGER 触发器名称

ON A表

AFTER INSERT

AS BEGIN INSERT INTO

B表(B表字段1,B表字段2,B表字段3)

SELECT A表字段1,A表字段2,A表字段3

FROM INSERTED

END

2.数据同步删除:

如有两张表——A表和B表,创建触发器使当A表删除数据后B表也同步删除数据。其中B表与A表应有相应主键关联。

CREATE TRIGGER 触发器名称

ON A表

AFTER DELETE

AS BEGIN DELETE B表

WHERE

B表主键 IN(

SELECT A表主键

FROM DELETED)

END

3.数据同步更新:

如有两张表——A表和B表,创建触发器使当A表数据更新后B表也同步更新数据。

CREATE TRIGGER 触发器名称

ON A表

AFTER UPDATE

AS

update B表

SET

B.B表字段1=A.A表字段1

FROM

B表 AS B,INSERTED AS A

WHERE B.B表主键=A.A表主键

我为什么要使用触发器?比如,这么两个表:

Create Table Student(             –学生表

StudentID int primary key,      –学号

….

)

Create Table BorrowRecord(              –学生借书记录表

BorrowRecord  int identity(1,1),      –流水号

StudentID     int ,                   –学号

BorrowDate    datetime,               –借出时间

ReturnDAte    Datetime,               –归还时间

)

用到的功能有:

1.如果我更改了学生的学号,我希望他的借书记录仍然与这个学生相关(也就是同时更改借书记录表的学号);

2.如果该学生已经毕业,我希望删除他的学号的同时,也删除它的借书记录。

等等。

这时候可以用到触发器。对于1,创建一个Update触发器:

Create Trigger truStudent

On Student                        –在Student表中创建触发器

for Update                         –为什么事件触发

As                                       –事件触发后所要做的事情

if Update(StudentID)

begin

Update BorrowRecord

Set StudentID=i.StudentID

From BorrowRecord br , Deleted  d ,Inserted i     –Deleted和Inserted临时表

Where br.StudentID=d.StudentID

end

理解触发器里面的两个临时的表:Deleted , Inserted 。注意Deleted 与Inserted分别表示触发事件的表“旧的一条记录”和“新的一条记录”。

一个数据库教程系统中有两个虚拟表用于存储在表中记录改动的信息,分别是:

虚拟表Inserted                    虚拟表Deleted

在表记录新增时    存放新增的记录                        不存储记录

修改时          存放用来更新的新记录                  存放更新前的记录

删除时          不存储记录                            存放被删除的记录

一个Update 的过程可以看作为:生成新的记录到Inserted表,复制旧的记录到Deleted表,然后删除Student记录并写入新纪录。

对于2,创建一个Delete触发器

Create trigger trdStudent

On Student

for Delete

As

Delete BorrowRecord

From BorrowRecord br , Delted d

Where br.StudentID=d.StudentID

从这两个例子我们可以看到了触发器的关键:A.2个临时的表;B.触发机制。

这里我们只讲解最简单的触发器。复杂的容后说明。