sp_addlinkedserver 与 sp_addlinkedsrvlogin 的用法

要想在本地访问服务器上的数据库数据得先执行两个存储过程:
exec sp_addlinkedserver '[目标服务器]','','SQLOLEDB','[服务器]'
exec sp_addlinkedsrvlogin
'[目标服务器]',
'false',
NULL,
'[数据库账号]',
'[数据库密码]'
执行完后便可以访问了
select * into [表名] from [目标服务器].[数据库].dbo.[表名]

今天聽到同事在講DBLink的東西,去找了一下資料其實DBLink就是將不同的DB Server建立連結起來..可以下Query Sql語法連結不同的DB Server..小弟以兩台 MS SQL Server 2005 來測試

--Add DB Link Server

EXEC sp_addlinkedserver

@server = 'F6', --Server Name

@srvproduct = 'MS SQL',

@datasrc = '192.168.1.1' , --Server IP

@provider = 'SQLNCLI'

--Remove DB Link Server

EXEC sp_dropserver

@server = 'F6' --Server Name

--Add Login User and Password

EXEC sp_addlinkedsrvlogin

@rmtsrvname = 'F6' , --Server Name

@useself = 'false' ,

@locallogin = NULL ,

@rmtuser = 'sa' , --User

@rmtpassword = 'sasa' –Password

--Query DB Link Server

select * from sys.servers

--Query Login User

select * from sys.linked_logins

--Query DB Link Data

select * from [F6].[database].[dbo].[table]

--select * from [server name].[database name].[owner name].[table name]

在我们做数据库程序开发的时候,经常会遇到这种情况:需要将一个数据库服务器中的数据导入到另一个数据库服务器的表中。通常我们会使用这种方法:先把一个数据库中的数据取出来放到某出,然后再把这些数据一条条插入到目的数据库中,这种方法效率较低,写起程序来也很繁琐,容易出错。另外一种方法是使用bcp或BULK INSERT语句,将数据导入到一个文件中,再从此文件中导出到目的数据库,这种方法虽然效率稍高,但也有很多不如意的地方,单是在导入时怎样找到另外一台机器上的数据导入文件就很麻烦。
  最方便的一种方法,我想也是效率最高的方法,应该是这样:
  比如有两个数据库服务器:zl和ljw,里面都有一个数据库taxitemp(也可以不同名),数据库里有一个表,叫users,我们现在想把zl中的users数据导入到ljw中,可以这样写sql语句(假设现在连接的是zl数据库):
insert into ljw.taxitemp.dbo.users
select * from users
  这样,通过一条sql语句就完成了不同数据库服务器之间的数据复制。
  有人会说,这种sql语句我也会写,我也想到了,但是没办法执行。
  的确,单纯的这样一条语句没办法执行,因为数据库不知道ljw是什么服务器,也不知道怎样登录,当然会报错。
  我们可以这样解决注册远程数据库服务器和登录的问题:
  注册远程数据库服务器:
EXEC sp_addlinkedserver 'ljw', N'SQL Server'
  注册远程数据库服务器的登录方法:
EXEC sp_addlinkedsrvlogin 'ljw', 'false', NULL, 'sa', 'zz'
  至于这两个存储过程的详细用法,我就不多讲了,大家看看帮助就明白了。
  只要我们先执行远程数据库服务器注册和登录方法注册,然后就可以把远程数据库当成本地数据库使用了。
在我们做数据库程序开发的时候,经常会遇到这种情况:需要将一个数据库服务器中的数据导入到另一个数据库服务器的表中。通常我们会使用这种方法:先把一个数据库中的数据取出来放到某出,然后再把这些数据一条条插入到目的数据库中,这种方法效率较低,写起程序来也很繁琐,容易出错。另外一种方法是使用bcp或BULK INSERT语句,将数据导入到一个文件中,再从此文件中导出到目的数据库,这种方法虽然效率稍高,但也有很多不如意的地方,单是在导入时怎样找到另外一台机器上的数据导入文件就很麻烦。最方便的一种方法,我想也是效率最高的方法,应该是这样:比如有两个数据库服务器:zl和ljw,里面都有一个数据库taxitemp(也可以不同名),数据库里有一个表,叫users,我们现在想把zl中的users数据导入到ljw中,可以这样写sql语句(假设现在连接的是zl数据库): insert into ljw.taxitemp.dbo.users select * from users 这样,通过一条sql语句就完成了不同数据库服务器之间的数据复制。有人会说,这种sql语句我也会写,我也想到了,但是没办法执行。的确,单纯的这样一条语句没办法执行,因为数据库不知道ljw是什么服务器,也不知道怎样登录,当然会报错。我们可以这样解决注册远程数据库服务器和登录的问题:注册远程数据库服务器: EXEC sp_addlinkedserver 'ljw', N'SQL Server' 注册远程数据库服务器的登录方法: EXEC sp_addlinkedsrvlogin 'ljw', 'false', NULL, 'sa', 'zz' 至于这两个存储过程的详细用法,我就不多讲了,大家看看帮助就明白了。只要我们先执行远程数据库服务器注册和登录方法注册,然后就可以把远程数据库当成本地数据库使用了。

sp_addlinkedserver使用方法
Exec sp_droplinkedsrvlogin DBVIP,Null
Exec sp_dropserver DBVIP
EXEC sp_addlinkedserver
@server='DBVIP',--被访问的服务器别名
@srvproduct='',
@provider='SQLOLEDB',
@datasrc='Server2' --要访问的服务器
EXEC sp_addlinkedsrvlogin
'DBVIP', --被访问的服务器别名
'false',
NULL,
'sa', --帐号
'thankyoubobby' --密码
Select * from DBVIP.pubs.dbo.orders
/ORACLE
Exec sp_droplinkedsrvlogin demo,Null
Exec sp_dropserver demo
go
EXEC sp_addlinkedserver
@server ='demo',
@srvproduct='Oracle',
@provider='MSDAORA',
@datasrc='ServiceName'

EXEC sp_addlinkedsrvlogin
'demo',
'false',
NULL,
'userid',
'password'
go
SELECT * FROM OPENQUERY(demo ,'select * from tbdemo' )
UPDATE OPENQUERY (demo, 'SELECT id FROM tbdemo WHERE id = 101')
SET name = 'hello';
INSERT OPENQUERY (demo, 'SELECT id FROM tbdemo')
VALUES ('hello');
DELETE OPENQUERY (demo, 'SELECT id FROM tbdemo WHERE name = ''hello''');

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值