sqlserver触发器存入远程数据库

上传人:marr****208 文档编号:149761998 上传时间:2020-10-29 格式:DOC 页数:26 大小:109KB
返回 下载 相关 举报
sqlserver触发器存入远程数据库_第1页
第1页 / 共26页
sqlserver触发器存入远程数据库_第2页
第2页 / 共26页
sqlserver触发器存入远程数据库_第3页
第3页 / 共26页
sqlserver触发器存入远程数据库_第4页
第4页 / 共26页
sqlserver触发器存入远程数据库_第5页
第5页 / 共26页
点击查看更多>>
资源描述

《sqlserver触发器存入远程数据库》由会员分享,可在线阅读,更多相关《sqlserver触发器存入远程数据库(26页珍藏版)》请在金锄头文库上搜索。

1、SQL code通过触发器实现数据库的即时同步 -即时同步两个表的实例: -测试环境:SQL2000,远程主机名:xz,用户名:sa,密码:无,数据库名:test-创建测试表,不能用标识列做主键,因为不能进行正常更新-在本机上创建测试表,远程主机上也要做同样的建表操作,只是不写触发器if exists (select * from dbo.sysobjects where id = object_id(Ntest) and OBJECTPROPERTY(id, NIsUserTable) = 1)drop table testcreate table test(id int not null

2、constraint PK_test primary key ,name varchar(10)go-创建同步的触发器create trigger t_test on testfor insert,update,deleteasset XACT_ABORT on-启动远程服务器的MSDTC服务exec master.xp_cmdshell isql /Sxz /Usa /P /qexec master.xp_cmdshell net start msdtc,no_output,no_output-启动本机的MSDTC服务exec master.xp_cmdshell net start msd

3、tc,no_output-进行分布事务处理,如果表用标识列做主键,用下面的方法BEGIN DISTRIBUTED TRANSACTIONdelete from openrowset(sqloledb,xz;sa;,test.dbo.test) where id in(select id from deleted)insert into openrowset(sqloledb,xz;sa;,test.dbo.test) select * from insertedcommit trango-插入数据测试insert into testselect 1,aaunion all select 2,b

4、bunion all select 3,cunion all select 4,ddunion all select 5,abunion all select 6,bcunion all select 7,ddd-删除数据测试delete from test where id in(1,4,6)-更新数据测试update test set name=name+_123 where id in(3,5)-显示测试的结果select * from test a full joinopenrowset(sqloledb,xz;sa;,test.dbo.test) b on a.id=b.idSQLS

5、ERVER 本地查询更新操作远程数据库的代码 复制代码代码如下: -PK select * from sys.key_constraints where object_id = OBJECT_ID(TB) -FK select * from sys.foreign_keys where parent_object_id =OBJECT_ID(TB) -创建链接服务器 exec sp_addlinkedserver ITSV , , SQLOLEDB , 远程服务器名或ip地址 exec sp_addlinkedsrvlogin ITSV , false ,null, 用户名 , 密码 -查询示

6、例 select * from ITSV.数据库名.dbo.表名 -导入示例 select * into 表 from ITSV.数据库名.dbo.表名 -以后不再使用时删除链接服务器 exec sp_dropserver ITSV , droplogins -连接远程/局域网数据(openrowset/openquery/opendatasource) -1、openrowset -查询示例 select * from openrowset( SQLOLEDB , sql服务器名 ; 用户名 ; 密码 ,数据库名.dbo.表名) -生成本地表 select * into 表 from ope

7、nrowset( SQLOLEDB , sql服务器名 ; 用户名 ; 密码 ,数据库名.dbo.表名) -把本地表导入远程表 insert openrowset( SQLOLEDB , sql服务器名 ; 用户名 ; 密码 ,数据库名.dbo.表名) select *from 本地表 -更新本地表 update b set b.列A=a.列A from openrowset( SQLOLEDB , sql服务器名 ; 用户名 ; 密码 ,数据库名.dbo.表名)as a inner join 本地表 b on a.column1=b.column1 -openquery用法需要创建一个连接

8、-首先创建一个连接创建链接服务器 exec sp_addlinkedserver ITSV , , SQLOLEDB , 远程服务器名或ip地址 -查询 select * FROM openquery(ITSV, SELECT * FROM 数据库.dbo.表名 ) -把本地表导入远程表 insert openquery(ITSV, SELECT * FROM 数据库.dbo.表名 ) select * from 本地表 -更新本地表 update b set b.列B=a.列B FROM openquery(ITSV, SELECT * FROM 数据库.dbo.表名 ) as a inne

9、r join 本地表 b on a.列A=b.列A -3、opendatasource/openrowset SELECT * FROM opendatasource( SQLOLEDB , Data Source=ip/ServerName;User ID=登陆名;Password=密码 ).test.dbo.roy_taSQL不同服务器数据库之间的数据操作整理(完整版)-1.创建链接服务器-1.1创建一个链接名EXECsp_addlinkedserverLinkName,SQLOLEDB,远程服务器名或ip地址-有自定义实例名还要加上/实例名/*例如:EXEC sp_addlinkedse

10、rver TonyLink,SQLOLEDB,192.168.58.208 */-1.2创建登录信息(或叫创建链接服务器登录名映射)(只需选择一种方式)-1.2.1以windows认证的方式登录EXECsp_addlinkedsrvloginLinkName-或EXEC sp_addlinkedsrvlogin LinkName,true/*例如:EXEC sp_addlinkedsrvlogin TonyLink*/-1.2.2以SQL认证的方式登录EXECsp_addlinkedsrvloginLinkName,false,NULL,用户名,密码/*例如:EXEC sp_addlinked

11、srvlogin TonyLink,false,null,sa,123 */-2.链接服务器相关数据操作-2.1查询示例SELECT*FROMLinkName.数据库名.架构名.表名/*例如:SELECT * FROM TonyLink.Mydb.dbo.tb */-2.2导入示例SELECT*INTO表名FROMLinkName.数据库名.架构名.表名/*例如:SELECT * INTO Newtb FROM TonyLink.Mydb.dbo.tb */-2.3更新示例UPDATELinkName.数据库名.架构名.表名SET字段=值WHERE字段=条件/*例如:UPDATE TonyLi

12、nk.Mydb.dbo.tb SET Persons=g WHERE Persons=a */-2.4删除示例DELETELinkName.数据库名.架构名.表名WHERE字段名=条件/*例如:DELETE TonyLink.Mydb.dbo.tb WHERE Persons=g */-3.通过行集函数(OPENQUERY/OPENROWSET/OPENDATASOURCE)操作方法-3.1 OPENQUERY方法(需要借助刚创建的链接服务器):-3.1.1查询示例SELECT*FROMOPENQUERY(LinkName,SELECT * FROM数据库名.架构名.表名)/*例如:SELECT * FROM OPENQUERY(TonyLink,SELECT * FROM Mydb.dbo.tb)*/-3.1.2导入示例-3.1.2.1导入所有列INSERTOPENQUERY(LinkName,SELECT *FROM数据库名.架构名.表名)SELECT*FROM本地表/*例如:INSERT OPENQUERY(TonyLink,SELECT *FROM Mydb.dbo.tb) SELEC

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号