SqlServer触发器的使用

来源:互联网 发布:怎样改淘宝密码 编辑:程序博客网 时间:2024/05/16 13:05

首先:说明一个触发器使用的场景。

1.服务器0001上的Employee表负责存储公司所有员工的最新数据,新员工入职、员工更换部门以及员工离职等信息都存在该表中。

2.由于业务需求,公司新上了一个OA系统,为了确保系统正常平稳运行且不影响公司其他服务器,所以OA系统就部署在了0002服务器上。

3.OA系统需要公司员工的最新信息,但是远程连接频繁调取0001服务器上的Employee表会影响到0001服务器的运行,而且OA系统需要员工最新的基础信息(姓名、工号、部门、在职状态)以及添加一些自定义的员工信息,信息存在EmpInfo表中。


基于以上场景,考虑使用触发器来完成。即在0001服务器上Employee表添加触发器来对0002服务器上的EmpInfo表进行更新操作。


步骤1:分析需要建立的触发器的类型

新员工入职,Emoloyee表会新增数据,Insert触发器

员工更换部门,Employee表会更新数据,Update触发器

员工离职,Employee表会删除数据(一般不会删除数据,但是为了下面有关删除情况的触发器操作,所以这里作此假设),Delete触发器。


步骤2:在0001服务器上建立0002服务器的远程连接

因为要对0002服务器的EmpInfo表进行增删改操作,所以需要先建立远程连接,脚本如下:

exec sp_addlinkedserver 'server0002', ' ', 'SQLOLEDB ', '192.168.0.1' 
exec sp_addlinkedsrvlogin 'server0002', 'false ',null, 'sa', '123456'


步骤3:编写触发器脚本

Insert触发器

create trigger trigger_sync_userdata_inserton Employee    for insertasbegin--对EmpInfo进行批量插入操作insert server0002.dbo.EmpInfo select * from insertedendgo


Update触发器

create trigger trigger_sync_userdata_updateon Employee    for updateasbegin--对EmpInfo进行批量更新操作update a set a.Dept=b.Dept,a.Statues=b.Statuesfrom server0002.dbo.EmpInfo ainner join inserted b on a.EmployeeNo= b.EmployeeNoendgo

Delete触发器

create trigger trigger_sync_userdata_deleteon Employee    for deleteasbegin--对EmpInfo进行批量删除操作delete from server0002.dbo.EmpInfo where EmployeeNo in (select EmployeeNo from deleted)endgo

如上所示:三种触发器已经建好,当0001服务器的Employee表的数据进行增删改的时候,对应的0002服务器的EmpInfo表的数据也会对应的进行增删改操作。


备注:

1.插入操作(Insert) 
Inserted表有数据,Deleted表无数据 

2.更新操作(Update) 
Inserted表有数据(新数据),Deleted表有数据(旧数据)

3.删除操作(Delete) 
Inserted表无数据,Deleted表有数据 

0 0
原创粉丝点击