资源描述:
《sqlserver跨服务器触发器的写法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、触发器跨服务器访问远程服务器----郑建营跨服务器的触发器书写方法引言:电子病历的病人的基本信息,来源于HIS系统的病人基本信息。两个数据库的信息交互,通过HIS表的触发器来实现。但是伴随着业务的增长,HIS数据库和病历数据库可能会部署到不同的服务器上,因此,两个库之间的触发器,必须能满足跨服务器的访问。书写跨服务器的数据访问,必须要对两台服务器进行相关配置和建立远程服务连接(分布事务),具体实施步骤如下:一、启用远程分布式服务1、打开控制面板,找到管理工具,双击打开,如图:启动“DistributedTransactionCoordinator”服务,见下图触发器跨服务器访问远程服务器---
2、-郑建营1、设置MSDTC选项l在管理工具中,找到组建服务,双击打开,找到“我的电脑”,鼠标右键点击,选择“属性”如图:l打开窗口后,选择选择“MSDTC”选项卡l点击“安全性配置”按钮,l网络DTC访问勾选上,允许远程客户端,允许远程管理,允许入站,允许出站,不要求身份验证勾选上。注意:1、以上步骤需要两台服务器都必须配置。2、启动分布式服务后还要打开远程服务器以及本地服务器135端口,因为远程分布式服务需要该端口通讯。启用通讯端口方法看下节。一、启用通讯端口1、打开控制面板,找到管理工具,双击打开,如图:触发器跨服务器访问远程服务器----郑建营1、启用防火墙,点击例外,点击添加程序。找到
3、路径下:C:WINDOWSsystem32msdtc.exe选中:msdtc.exe触发器跨服务器访问远程服务器----郑建营1、添加端口135点击添加端口,如图增加135端口。注意:1、以上步骤需要两台服务器都必须配置。一、建立两台服务器的连接1、建立互访连接execsp_addlinkedserver'emr_server','','SQLOLEDB','192.168.0.10'---创建服务器连接execsp_addlinkedsrvlogin'emr_server','false',null,'sa','146-164-152-'--创建登陆sp_dropserver'his'
4、,'droplogins'--删除服务器连接和登陆,再也不使用了,可以删除。'192.168.0.10':目标服务器,即需要连接的远程服务器名称或IP,即电子病历服务器的名称或IP触发器跨服务器访问远程服务器----郑建营2、书写触发器;例如:CREATETRIGGER[test_user]ON[dbo].[user]FORINSERT,UPDATEASsetxact_abortonupdatebsetname=i.namefromhis.emrdb.[dbo].[user]b,insertediwhereb.id=i.id完成上述三大步骤即可完成触发器的跨服务器访问。一、远程触发器访问示例:
5、-新增同步createtriggertr_insert_authoronauthorforinsertassetxact_abortoninsertsrv2.库名.dbo.author(id,name,telphone)selectid,name,telphonefrominsertedgo--修改同步createtriggertr_update_authoronauthorforupdateassetxact_abortonupdatebsetname=i.name,telphone=i.telphonefromsrv2.库名.dbo.authorb,insertediwhereb.id=i
6、.idgo--删除同步createtriggertr_delete_authoronauthorfordeleteassetxact_abortondeletebfromsrv2.库名.dbo.authorb,deleteddwhereb.id=d.idgo 触发器跨服务器访问远程服务器----郑建营--连接远程/局域网数据(openrowset/openquery/opendatasource)--1、openrowset--查询示例select*fromopenrowset('SQLOLEDB','sql服务器名';'用户名';'密码',数据库名.dbo.表名)--生成本地表select
7、*into表fromopenrowset('SQLOLEDB','sql服务器名';'用户名';'密码',数据库名.dbo.表名)--把本地表导入远程表insertopenrowset('SQLOLEDB','sql服务器名';'用户名';'密码',数据库名.dbo.表名)select*from本地表--更新本地表updatebsetb.列A=a.列Afromopenrowset('SQLOLED