异地存储过程(远程管理案例)

异地存储过程(远程管理案例)
问:可不可以在本地写一个存储过程用本地的一个表的数据去插入另一台机的数据库中的一个表呢?
存储过程 machineA.SQlServerA.DataBaseA.TableA---->machineB.SQlServerB.DataBaseB.TableB


 答:第一步建立一个远程连接

  使用sql-server进行分布式查询(链接服务器)

  可以使用sql-server企业管理器进行建立,注意其中的rpc及rpc out两项,也可以使用sql语句来完成定义,主要涉及到三个存储过程

  sp_addlinkedserver,sp_serveroption和sp_addlinkedsrvlogin,以下是三个存储过程的语法:

  sp_addlinkedserver
  创建一个链接的服务器,使其允许对分布式的、针对 OLE DB 数据源的异类查询进行访问。在使用 sp_addlinkedserver 创建链接的服务器之后,此服务器就可以执行分布式查询。如果链接服务器定义为 Microsoft? SQL Server?,则可执行远程存储过程。

  语法
  sp_addlinkedserver [ @server = ] 'server'
  [ , [ @srvproduct = ] 'product_name' ]
  [ , [ @provider = ] 'provider_name' ]
  [ , [ @datasrc = ] 'data_source' ]
  [ , [ @location = ] 'location' ]
  [ , [ @provstr = ] 'provider_string' ]
  [ , [ @catalog = ] 'catalog' ]

  例如:
  sp_addlinkedserver 'ServerName','','SQLOLEDB','dbconn',null,'driver={sql server};server=192.168.1.181;uid=sa,pwd=;'

  此处ServerName为自定义名称,dbconn为定义的odbc数据源

  一般使用的参数如下:
  @server “LINKED SERVER”
  @srvproduct “Product name”
  @provider “Provider”
  @datasrc “Data source”

  二、设置服务器选项

  使用 sp_serveroption 过程,所要使用的参数如下:

  @server “Linked server”
  @optname “RPC”或“RPC OUT”
  @optvalue True 或 False

  三、添加Login

  使用 sp_addlinkedsrvlogin 过程,所要使用的参数如下:

  @rmtsrvname “Linked server”
  @useself True 或 False
  @locallogin 本地LOGIN
  @rmtuser 远程用户
  @rmtpassword 远程用户口令

  全部完整的示例如下:
程序代码 程序代码
exec sp_helpserver /*---查看远程服务器的列表-------*/
exec sp_helplinkedsrvlogin /*------查看远程服务器的登录用户---------*/
exec sp_droplinkedsrvlogin 'sestlserver',null /*----删除远程服务器的登录用户-----*/
exec sp_dropserver 'sestlserver','droplogins'/*-----删除远程服务器------*/


EXEC sp_addlinkedserver 'sestlserver','','SQLOLEDB','sestlserver',null,'driver={sql server};server=192.168.0.2;uid=sa,pwd=tianqibuhao;'
exec sp_serveroption N'sestlserver', N'rpc out', N'true'
exec sp_serveroption N'sestlserver', N'rpc', N'true'
exec sp_addlinkedsrvlogin 'sestlserver','False',null,'sa','tianqibuhao'
/*------建立一个远程的连接服务器---------*/

/*---在远程服务器上建立一个表----*/
create table tb2
(学号 int,科目 varchar(20),成绩 int)

学号     科目    成绩
----------- ---------- -----------
6      政治    50
6      英语    70
7      语文    80
7      数学    90
7      英语    71

/*---在本地服务器上建立一个表----*/
create table tb1
(学号 int,科目 varchar(20),成绩 int)

学号     科目    成绩
----------- ---------- -----------
1      语文    60
1      数学    70
1      英语    75
1      政治    60
2      语文    55
2      数学    53
2      英语    71
3      语文    80
4      数学    0
5      英语    91

/*---在本地服务器上建立一个分布视图----*/
creat view student as
  select * from tb1
union all
  select * from sestlserver.test.dbo.tb2

/*---查询分布视图----*/
select * from student

学号     科目    成绩
----------- ---------- -----------
1      语文    60
1      数学    70
1      英语    75
2      语文    55
2      数学    53
2      英语    71
3      语文    80
4      数学    0
5      英语    91
1      政治    60
6      政治    50
6      英语    70
7      语文    80
7      数学    90
7      英语    71

比如拿上面的数据来讲,可以如此操作。

本地服务器,表tb
远程服务器,表tb2

向本地表中插入远程的数据

insert tb
select * from sestlserver.test.dbo.tb2

向远程服务器插入本地数据

insert sestlserver.test.dbo.tb2
select * from tb
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值