SQL SERVER2005建Link Server

SQL Server2005中的link server类似于Oracle里面的DB Link , 透过link server可以访问另一个数据库中的对象
, 这些Link Server可以是SQL Server , 也可以是Oracle等其他类型的数据库, 建好Link
Server后就可以象操作当前数据库一样操作其他数据库了,建立的过程非常简单 , 只需要执行几个系统存储过程并传入适当的参数就可以了 。

第一个要执行的存储过程格式如下 :

sp_addlinkedserver [ @server= ] 'server' [ , [ @srvproduct= ] 'product_name' ]
[ , [ @provider= ] 'provider_name' ] [ , [ @datasrc= ] 'data_source' ]

[ , [ @location= ] 'location' ] [ , [ @provstr= ] 'provider_string' ]
[ , [ @catalog= ] 'catalog' ]

[ *@server* *=* ] *'**server**'*

要创建的链接服务器的名称。*server* 的数据类型为 *sysname*,没有默认值。
[ *@srvproduct* *=* ] *'**product_name**'*

要添加为链接服务器的 OLE DB 数据源的产品名称。*product_name* 的数据类型为 *nvarchar(*128*)*,默认值为
NULL。如果为 *SQL Server*,则不必指定 *provider_name*、*data_source*、*location*、*
provider_string* 和 *catalog*。
[ *@provider* *=* ] *'**provider_name**'*

与此数据源对应的 OLE DB 访问接口的唯一编程标识符 (PROGID)。对于当前计算机中安装的指定 OLE DB 访问接口,*
provider_name* 必须唯一。*provider_name* 的数据类型为 *nvarchar(*128*)*,默认值为 NULL;但如果忽略
*provider_name*,则使用 SQLNCLI。(使用 SQLNCLI 并且 SQL Server 将重定向到 SQL Server
Native Client OLE DB 访问接口的最新版本。)OLE DB 访问接口应以指定的 PROGID 在注册表中注册。
[ *@datasrc* *=* ] *'**data_source**'*

由 OLE DB 访问接口解释的数据源的名称。*data_source* 的数据类型为
*nvarchar(*4000*)*。*data_source*作为 DBPROP_INIT_DATASOURCE 属性传递以初始化 OLE
DB 访问接口。
[ *@location* *=* ] *'**location**'*

由 OLE DB 访问接口解释的数据库的位置。*location* 的数据类型为 *nvarchar(*4000*)*,默认值为 NULL。*
location* 作为 DBPROP_INIT_LOCATION 属性传递以初始化 OLE DB 访问接口。
[ *@provstr* *=* ] *'**provider_string**'*

OLE DB 访问接口特定的连接字符串,它可标识唯一的数据源。*provider_string* 的数据类型为 *nvarchar(*4000*)*,默认值为
NULL。*provstr* 或传递给 *IDataInitialize* 或设置为 DBPROP_INIT_PROVIDERSTRING 属性以初始化
OLE DB 访问接口。

当针对 SQL Server Native Client OLE DB 访问接口创建链接服务器时,可以使用 SERVER 关键字来指定实例,即使用
SERVER=*servername*/*instancename* 指定特定 SQL Server 实例。*servername* 是运行 SQL
Server 的计算机的名称,*instancename* 是用户要连接的特定 SQL Server 实例的名称。

比如我Local端有一个SQL Server ,里面有两个数据库 LocalTest和MyDataBase ,
我想在LocalTest里面访问MyDataBase里面的一个表TableTest1 , 建立过程如下 :

1 。 打开SQL Server2005集成开发环境 , 连接到要建立Link Server的数据主机 , 然后新建一个查询
,在查询窗口中输入如下的代码 :
EXEC master.dbo.sp_addlinkedserver
@server = N'LINK_LOCAL',
@srvproduct=N'',
@provider = N'SQLNCLI',
@datasrc = N'(Local)'
注意 :每个参数在赋值的时候都在前面加多一个N表示后面的值当作Unicode来处理
说明如下 :
@server :link的名字,建好Link后其他数据库就可以通过这个名字来访问
@srvproduct :为空 ,参数占位符
@provider :驱动代码
@datasrc :数据库服务器 , 因为是本机端的 , 所以用(Local)

第二 :建立好这个Link之后还需要给给这个link加登陆的账号密码 , 因为从外部访问这个Link server的时候需要先登陆 , 存储过程如下

EXEC sp_addlinkedsrvlogin 'LINK_LOCAL', 'false', null, 'account', 'password'
说明 :第一个参数的值是上面建立的link的名称 , 最后两个参数参数分别为账号密码 , 执行后可以在继承开发环境中看到新建的这个link
server , 如下图 :
[image: SQL SERVER2005建Link Server(原创) - allan -
我的博客]<http://img.blog.163.com/photo/NY8VQXKqxf5ruGE7DOucCw==/45221769758346...>

第三 : 建立好后还可以给这个LInk server加一些权限 :
如 :EXEC sp_serveroption ‘REMOTE_SERVER_NAME’, ‘data access’, ‘true’

第四 :然后我们就可以在任何需要的地方访问这个LInk server了 , 如 :
select * from LINK_Local.MyDataBase.dbo.TableTest1

附 :通过 OLE DB 访问数据源而建立链接服务器的方法

[image: SQL SERVER2005建Link Server(原创) - allan -
我的博客]<http://img.blog.163.com/photo/YoudxYBQtbKRMDhm4lw2qQ==/42663162220046...>

连接不同数据库实例如下 :

A. 下例使用 SQL Server Native Client OLE DB 访问接口在 SQL Server 实例中创建链接服务器

EXEC sp_addlinkedserver
@server='S1_instance1',
@srvproduct='',
@provider='SQLNCLI',
@datasrc='S1/instance1'

B. 使用 Microsoft OLE DB Provider for Microsoft Access

EXEC sp_addlinkedserver
@server = 'SEATTLE Mktg',
@provider = 'Microsoft.Jet.OLEDB.4.0',
@srvproduct = 'OLE DB Provider for Jet',

@datasrc = 'C:/MSOffice/Access/Samples/Northwind.mdb'

C. 使用 Microsoft OLE DB Provider for Oracle

EXEC sp_addlinkedserver
@server = 'LONDON Mktg',
@srvproduct = 'Oracle',
@provider = 'MSDAORA',
@datasrc = 'MyServer'

D. 将 Microsoft OLE DB Provider for ODBC 与 data_source 参数一起使用

EXEC sp_addlinkedserver
@server = 'SEATTLE Payroll',
@srvproduct = '',
@provider = 'MSDASQL',
@datasrc = 'LocalServer'

E. 将 Microsoft OLE DB Provider 用于 Excel 电子表格

EXEC sp_addlinkedserver 'ExcelSource',
'Jet 4.0',
'Microsoft.Jet.OLEDB.4.0',
'c:/MyData/DistExcl.xls',
NULL,

'Excel 5.0'

H. 使用 Microsoft OLE DB Provider for Jet 访问文本文件

--Create a linked server.
EXEC sp_addlinkedserver txtsrv, 'Jet 4.0',
'Microsoft.Jet.OLEDB.4.0',
'c:/data/distqry',

NULL,
'Text'
GO

--Set up login mappings.
EXEC sp_addlinkedsrvlogin txtsrv, FALSE, Admin, NULL
GO

--List the tables in the linked server.
EXEC sp_tables_ex txtsrv
GO

--Query one of the tables: file1#txt

--using a four-part name.
SELECT *

I. 使用 Microsoft OLE DB Provider for DB2

EXEC sp_addlinkedserver
@server='DB2',
@srvproduct='Microsoft OLE DB Provider for DB2',
@catalog='DB2',
@provider='DB2OLEDB',

@provstr='Initial Catalog=PUBS;
Data Source=DB2;
HostCCSID=1252;
Network Address=XYZ;
Network Port=50000;
Package Collection=admin;

参考文章 :http://msdn.microsoft.com/zh-cn/vstudio/ms190479.aspx

 

附上自己使用SQL SERVER连接OLAP分析服务器代码

EXEC sp_addlinkedserver
    @server='FoodMart 2008',                                                                        --link_server的名字,可以随便起
    @provider = N'MSOLAP',                                                                            --貌似连OLAP就填N'MSOLAP'
    @srvproduct = N'Microsoft OLE DB Provider for Analysis Services 10.0',    --貌似这里也可以随意填
    @datasrc ='GUANGH-PC',                                                                           --主机名
    @catalog='FoodMart 2008'                                                                        --分析服务器里面的数据库名字

建好并执行了sp_addlinkedserver后就可以访问OLAP里面的内容

select * from openquery([foodmart 2008],'select
{
 [Store].[Store].children
}on 0,
{
 [Time].[Year Month].children
}on 1
from [Sales]
where [Measures].[Store Sales]')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值