您的位置:首页 > 数据库

SqlServer触发器的使用

2017-05-08 14:47 246 查看
首先:说明一个触发器使用的场景。

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_insert
on Employee
for insert
as
begin
--对EmpInfo进行批量插入操作
insert server0002.dbo.EmpInfo select * from inserted
end
go


Update触发器:

create trigger trigger_sync_userdata_update
on Employee
for update
as
begin
--对EmpInfo进行批量更新操作
update a set
a.Dept=b.Dept,
a.Statues=b.Statues
from server0002.dbo.EmpInfo a
inner join inserted b on a.EmployeeNo= b.EmployeeNo
end
go


Delete触发器:

create trigger trigger_sync_userdata_delete
on Employee
for delete
as
begin
--对EmpInfo进行批量删除操作
delete from server0002.dbo.EmpInfo where EmployeeNo in (select EmployeeNo from deleted)
end
go


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

备注:

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

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

3.删除操作(Delete) 
Inserted表无数据,Deleted表有数据 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: