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触发器:
Update触发器:
Delete触发器:
如上所示:三种触发器已经建好,当0001服务器的Employee表的数据进行增删改的时候,对应的0002服务器的EmpInfo表的数据也会对应的进行增删改操作。
备注:
1.插入操作(Insert)
Inserted表有数据,Deleted表无数据
2.更新操作(Update)
Inserted表有数据(新数据),Deleted表有数据(旧数据)
3.删除操作(Delete)
Inserted表无数据,Deleted表有数据
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表有数据
相关文章推荐
- sqlserver触发器的使用
- SQLServer触发器的使用
- SQLServer触发器的使用
- sqlserver触发器使用举例
- SQLServer触发器的使用
- 简析sqlserver触发器以及如何使用sql 触发器
- sqlserver触发器的使用
- SQLServer触发器的使用
- 在 Web 页上使用条件数值格式
- [导入]常用数据类型使用转换详解
- IP 伪装简易使用说明
- 源码推荐:一个使用C#绘制图形引擎的Framework
- Win32汇编教程六 工具栏和状态栏的使用
- Win32汇编教程五 菜单和加速键的使用
- Win32汇编教程三 一个简单的对话框 --- 兼谈资源文件的使用
- 使用ActiveX控件开发网页常见的问题
- 使用 ASP+ DataGrid 控件来创建主视图/详细资料视图 (2)
- 使用 ASP+ DataGrid 控件来创建主视图/详细资料视图
- [导入]如何使用Visual C++调试程序?
- 使用ASP和Word进行服务器端拼写检查