sql server触发器存入远程数据库.doc
《sql server触发器存入远程数据库.doc》由会员分享,可在线阅读,更多相关《sql server触发器存入远程数据库.doc(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数据库名.架构名.表名)/*例如:SELEC
13、T * 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) SELECT * FROM tb */-3.1.2.2导入指定列INSERTOPENQUERY(LinkName,SELECT *FROM数据库名.架构名.表名)(列,列.)SELECT列,列.FROM
14、本地表/*例如:INSERT OPENQUERY(TonyLink,SELECT *FROM Mydb.dbo.tb)(RANGE,LEVEL,Persons)SELECT RANGE,LEVEL,Persons FROM tb*/-3.1.3更新示例UPDATEOPENQUERY(LinkName,SELECT * FROM数据库名.架构名.表名)SET字段=值WHERE字段=条件/*例如:UPDATE OPENQUERY(TonyLink, SELECT * FROM Mydb.dbo.tb)SET Persons=g WHERE Persons=a */-3.1.4删除示例DELETEO
15、PENQUERY(LinkName,SELECT * FROM数据库名.架构名.表名)WHERE字段名=条件/*例如:DELETE OPENQUERY(TonyLink, SELECT * FROM Mydb.dbo.tb)WHERE Persons=g */-3.2 OPENROWSET方法(不需要用到创建好的链接名。如果连接的实例名不是默认的,需要在sql服务器名或IP地址后加上/实例名)-3.2.1查询示例-3.2.1.1 Windows认证方式查询(以下方法之一即可)SELECT*FROMOPENROWSET(SQLOLEDB,server=sql服务器名或IP地址;Trusted_C
16、onnection=yes,数据库名.架构名.表名)SELECT*FROMOPENROWSET(SQLNCLI,server=sql服务器名或IP地址;Trusted_Connection=yes,数据库名.架构名.表名)SELECT*FROMOPENROWSET(SQLOLEDB,server=sql服务器名或IP地址;Trusted_Connection=yes,SELECT * FROM数据库名.架构名.表名)SELECT*FROMOPENROWSET(SQLNCLI,server=sql服务器名或IP地址;Trusted_Connection=yes,SELECT * FROM数据库名
17、.架构名.表名)/*例如:SELECT * FROM OPENROWSET(SQLOLEDB,Server=192.168.58.208;Trusted_Connection=yes,Mydb.dbo.tb)或:SELECT * FROM OPENROWSET(SQLNCLI,Server=192.168.58.208;Trusted_Connection=yes,Mydb.dbo.tb)或:SELECT * FROM OPENROWSET(SQLOLEDB,Server=192.168.58.208;Trusted_Connection=yes,SELECT * FROM Mydb.dbo.
18、tb)或:SELECT * FROM OPENROWSET(SQLNCLI,Server=192.168.58.208;Trusted_Connection=yes,SELECT * FROM Mydb.dbo.tb)*/-3.2.1.2 SQL认证方式查询(以下方法之一即可)SELECT*FROMOPENROWSET(SQLOLEDB,server=sql服务器名或IP地址;uid=用户名;pwd=密码,数据库名.架构名.表名)SELECT*FROMOPENROWSET(SQLNCLI,server=sql服务器名或IP地址;uid=用户名;pwd=密码,数据库名.架构名.表名)SELECT
19、*FROMOPENROWSET(SQLOLEDB,server=sql服务器名或IP地址;uid=用户名;pwd=密码,SELECT * FROM数据库名.架构名.表名)SELECT*FROMOPENROWSET(SQLNCLI,server=sql服务器名或IP地址;uid=用户名;pwd=密码,SELECT * FROM数据库名.架构名.表名)SELECT*FROMOPENROWSET(SQLOLEDB,sql服务器名;用户名;密码,数据库名.架构名.表名)SELECT*FROMOPENROWSET(SQLNCLI,sql服务器名;用户名;密码,数据库名.架构名.表名)SELECT*FRO
20、MOPENROWSET(SQLOLEDB,sql服务器名;用户名;密码,SELECT * FROM数据库名.架构名.表名)SELECT*FROMOPENROWSET(SQLNCLI,sql服务器名;用户名;密码,SELECT * FROM数据库名.架构名.表名)/*例如:SELECT * FROM OPENROWSET(SQLOLEDB,server=192.168.58.208;uid=sa;pwd=123,mydb.dbo.tb)或:SELECT * FROM OPENROWSET(SQLNCLI,server=192.168.58.208;uid=sa;pwd=123,mydb.dbo.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- sql server触发器存入远程数据库 server 触发器 存入 远程 数据库
限制150内