創(chuàng)建一個(gè)鏈接的服務(wù)器,使其允許對(duì)分布式的、針對(duì) OLE DB 數(shù)據(jù)源的異類(lèi)查詢(xún)進(jìn)行訪(fǎng)問(wèn)。在使用 sp_addlinkedserver 創(chuàng)建鏈接的服務(wù)器之后,此服務(wù)器就可以執(zhí)行分布式查詢(xún)。如果鏈接服務(wù)器定義為 Microsoft® SQL Server™,則可執(zhí)行遠(yuǎn)程存儲(chǔ)過(guò)程。
sp_addlinkedserver [ @server = ] 'server'
[ , [ @srvproduct = ] 'product_name' ]
[ , [ @provider = ] 'provider_name' ]
[ , [ @datasrc = ] 'data_source' ]
[ , [ @location = ] 'location' ]
[ , [ @provstr = ] 'provider_string' ]
[ , [ @catalog = ] 'catalog' ]
[ @server = ] 'server'
要?jiǎng)?chuàng)建的鏈接服務(wù)器的本地名稱(chēng),server 的數(shù)據(jù)類(lèi)型為 sysname,沒(méi)有默認(rèn)設(shè)置。
如果有多個(gè) SQL Server 實(shí)例,server 可以為 servername\instancename。此鏈接的服務(wù)器可能會(huì)被引用為下面示例的數(shù)據(jù)源:
SELECT *FROM [servername\instancename.]pubs.dbo.authors.
如果未指定 data_source,則服務(wù)器為該實(shí)例的實(shí)際名稱(chēng)。
[ @srvproduct = ] 'product_name'
要添加為鏈接服務(wù)器的 OLE DB 數(shù)據(jù)源的產(chǎn)品名稱(chēng)。product_name 的數(shù)據(jù)類(lèi)型為 nvarchar(128),默認(rèn)設(shè)置為 NULL。如果是 SQL Server,則不需要指定 provider_name、data_source、location、provider_string 以及目錄。
[ @provider = ] 'provider_name'
與此數(shù)據(jù)源相對(duì)應(yīng)的 OLE DB 提供程序的唯一程序標(biāo)識(shí)符 (PROGID)。provider_name 對(duì)于安裝在當(dāng)前計(jì)算機(jī)上指定的 OLE DB 提供程序必須是唯一的。provider_name 的數(shù)據(jù)類(lèi)型為nvarchar(128),默認(rèn)設(shè)置為 NULL。OLE DB 提供程序應(yīng)該用給定的 PROGID 在注冊(cè)表中注冊(cè)。
[ @datasrc = ] 'data_source'
由 OLE DB 提供程序解釋的數(shù)據(jù)源名稱(chēng)。data_source 的數(shù)據(jù)類(lèi)型為 nvarchar(4000),默認(rèn)設(shè)置為 NULL。data_source 被當(dāng)作 DBPROP_INIT_DATASOURCE 屬性傳遞以便初始化 OLE DB 提供程序。
當(dāng)鏈接的服務(wù)器針對(duì)于 SQL Server OLE DB 提供程序創(chuàng)建時(shí),可以按照 servername\instancename 的形式指定 data_source,它可以用來(lái)連接到運(yùn)行于特定計(jì)算機(jī)上的 SQL Server 的特定實(shí)例上。servername 是運(yùn)行 SQL Server 的計(jì)算機(jī)名稱(chēng),instancename 是用戶(hù)將被連接到的特定 SQL Server 實(shí)例的名稱(chēng)。
[ @location = ] 'location'
OLE DB 提供程序所解釋的數(shù)據(jù)庫(kù)的位置。location 的數(shù)據(jù)類(lèi)型為 nvarchar(4000),默認(rèn)設(shè)置為 NULL。location 作為 DBPROP_INIT_LOCATION 屬性傳遞以便初始化 OLE DB 提供程序。
[ @provstr = ] 'provider_string'
OLE DB 提供程序特定的連接字符串,它可標(biāo)識(shí)唯一的數(shù)據(jù)源。provider_string 的數(shù)據(jù)類(lèi)型為 nvarchar(4000),默認(rèn)設(shè)置為 NULL。Provstr 作為 DBPROP_INIT_PROVIDERSTRING 屬性傳遞以便初始化 OLE DB 提供程序。
當(dāng)針對(duì) Server OLE DB 提供程序提供了鏈接服務(wù)器后,可將 SERVER 關(guān)鍵字用作 SERVER=servername\instancename 來(lái)指定實(shí)例,以指定特定的 SQL Server 實(shí)例。servername 是 SQL Server 在其上運(yùn)行的計(jì)算機(jī)名稱(chēng),instancename 是用戶(hù)連接到的特定的 SQL Server 實(shí)例名稱(chēng)。
[ @catalog = ] 'catalog'
建立 OLE DB 提供程序的連接時(shí)所使用的目錄。catalog 的數(shù)據(jù)類(lèi)型為sysname,默認(rèn)設(shè)置為 NULL。catalog 作為 DBPROP_INIT_CATALOG 屬性傳遞以便初始化 OLE DB 提供程序。
0(成功)或 1(失敗)
如果沒(méi)有指定參數(shù),則 sp_addlinkedserver 返回此消息:
Procedure 'sp_addlinkedserver' expects parameter '@server', which was not supplied.
使用適當(dāng) OLE DB 提供程序和參數(shù)的 sp_addlinkedserver 返回此消息:
Server added.
下表顯示為可通過(guò) OLE DB 訪(fǎng)問(wèn)的數(shù)據(jù)源設(shè)置鏈接服務(wù)器的方法。對(duì)于給定的數(shù)據(jù)源,可以使用多種方法為其設(shè)置鏈接服務(wù)器,下表中可能有不止一行適用于一種數(shù)據(jù)源類(lèi)型。下表也顯示了用于設(shè)置鏈接服務(wù)器的 sp_addlinkedserver 參數(shù)值。
| 遠(yuǎn)程 OLE DB 數(shù)據(jù)源 | OLE DB 提供程序 | product_name | provider_name | data_source | location | provider_string | catalog |
|---|---|---|---|---|---|---|---|
| SQL Server | 用于 SQL Server 的 Microsoft OLE DB 提供程序 | SQL Server (1)(默認(rèn)值) | - | - | - | - | - |
| SQL Server | 用于 SQL Server 的 Microsoft OLE DB 提供程序 | SQL Server | SQLOLEDB | SQL Server 的網(wǎng)絡(luò)名稱(chēng)(用于默認(rèn)實(shí)例) | - | - | 數(shù)據(jù)庫(kù)名稱(chēng)(可選) |
| SQL Server | 用于 SQL Server 的 Microsoft OLE DB 提供程序 | - | SQLOLEDB | 服務(wù)器名\實(shí)例名(對(duì)于特定實(shí)例) | - | - | 數(shù)據(jù)庫(kù)名稱(chēng)(可選) |
| Oracle | 用于 Oracle 的 Microsoft OLE DB 提供程序 | 任何 (2) | MSDAORA | 用于 Oracle 數(shù)據(jù)庫(kù)的 SQL*Net 別名 | - | - | - |
| Access/ Jet | 用于 Jet 的 Microsoft OLE DB 提供程序 | 任何 | Microsoft.Jet.OLEDB.4.0 | Jet 數(shù)據(jù)庫(kù)文件的完整路徑名 | - | - | - |
| ODBC 數(shù)據(jù)源 | 用于 ODBC 的 Microsoft OLE DB 提供程序 | 任何 | MSDASQL | ODBC 數(shù)據(jù)源的系統(tǒng) DSN | - | - | - |
| ODBC 數(shù)據(jù)源 | 用于 ODBC 的 Microsoft OLE DB 提供程序 | 任何 | MSDASQL | - | - | ODBC 連接字符串 | - |
| 文件系統(tǒng) | 用于索引服務(wù)的 Microsoft OLE DB 提供程序 | 任何 | MSIDXS | 索引服務(wù)目錄名稱(chēng) | - | - | - |
| Microsoft Excel 電子表格 | 用于 Jet 的 Microsoft OLE DB 提供程序 | 任何 | Microsoft.Jet.OLEDB.4.0 | Excel 文件的完整路徑名 | - | Excel 5.0 | - |
| IBM DB2 數(shù)據(jù)庫(kù) | 用于 DB2 的Microsoft OLE DB 提供程序 | 任何 | DB2OLEDB | - | - | 請(qǐng)參見(jiàn)用于 DB2 文檔的 Microsoft OLE DB 提供程序 | DB2 數(shù)據(jù)庫(kù)的目錄名 |
(1 ) 這種設(shè)置鏈接服務(wù)器的方式強(qiáng)制鏈接服務(wù)器的名稱(chēng)與遠(yuǎn)程 SQL Server 的網(wǎng)絡(luò)名稱(chēng)相同。使用 server 指定服務(wù)器。
(2 ) "任何"指產(chǎn)品名稱(chēng)可以任意。
data_source、location、provider_string 和 catalog 參數(shù)標(biāo)識(shí)鏈接服務(wù)器指向的數(shù)據(jù)庫(kù)。如果任一參數(shù)為 NULL 值,則不設(shè)置相應(yīng)的 OLE DB 初始化屬性。
說(shuō)明 若要在 SQL Server 6.x 版上使用 SQL Server 2000 版的 Microsoft OLE DB 提供程序,請(qǐng)?jiān)?6.x 版 SQL Server 上運(yùn)行 \Microsoft SQL Server\Install\Instcat.sql 腳本。此腳本對(duì)于在 SQL Server 6.x 服務(wù)器上運(yùn)行分布式查詢(xún)是基本的。
在群集環(huán)境中,當(dāng)指定指向 OLE DB 數(shù)據(jù)源的文件名時(shí),應(yīng)使用通用命名規(guī)則 (UNC) 名稱(chēng)或共享驅(qū)動(dòng)器指定位置。
執(zhí)行許可權(quán)限默認(rèn)授予 sysadmin 和 setupadmin 固定服務(wù)器角色的成員。
下面的示例創(chuàng)建一臺(tái)名為 SEATTLESales 的鏈接服務(wù)器,該服務(wù)器使用用于 SQL Server 的 Microsoft OLE DB 提供程序。
USE master
GO
EXEC sp_addlinkedserver
'SEATTLESales',
N'SQL Server'
GO
此示例在 SQL Server 的實(shí)例上創(chuàng)建一臺(tái)名為 S1_instance1 的鏈接服務(wù)器,該服務(wù)器使用 SQL Server 的 Microsoft OLE DB 提供程序。
EXEC sp_addlinkedserver @server='S1_instance1', @srvproduct='',
@provider='SQLOLEDB', @datasrc='S1\instance1'
此示例創(chuàng)建一臺(tái)名為 SEATTLE Mktg 的鏈接服務(wù)器。
說(shuō)明 本示例假設(shè)已經(jīng)安裝 Microsoft Access 和示例 Northwind 數(shù)據(jù)庫(kù),且 Northwind 數(shù)據(jù)庫(kù)駐留在 C:\Msoffice\Access\Samples。
USE master
GO
-- To use named parameters:
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'
GO
-- OR to use no named parameters:
USE master
GO
EXEC sp_addlinkedserver
'SEATTLE Mktg',
'OLE DB Provider for Jet',
'Microsoft.Jet.OLEDB.4.0',
'C:\MSOffice\Access\Samples\Northwind.mdb'
GO
此示例創(chuàng)建一臺(tái)名為 LONDON Mktg 的鏈接服務(wù)器,該服務(wù)器使用用于 Oracle 的 Microsoft OLE DB 提供程序,并且假設(shè)此 Oracle 數(shù)據(jù)庫(kù)的 SQL*Net 別名為 MyServer。
USE master
GO
-- To use named parameters:
EXEC sp_addlinkedserver
@server = 'LONDON Mktg',
@srvproduct = 'Oracle',
@provider = 'MSDAORA',
@datasrc = 'MyServer'
GO
-- OR to use no named parameters:
USE master
GO
EXEC sp_addlinkedserver
'LONDON Mktg',
'Oracle',
'MSDAORA',
'MyServer'
GO
此示例創(chuàng)建一臺(tái)名為 SEATTLE Payroll 的鏈接服務(wù)器,該服務(wù)器使用用于 ODBC 的 Microsoft OLE DB 提供程序和 data_source 參數(shù)。
說(shuō)明 在執(zhí)行 sp_addlinkedserver 之前,必須在服務(wù)器上將指定的 ODBC 數(shù)據(jù)源名稱(chēng)定義為系統(tǒng) DSN。
USE master
GO
-- To use named parameters:
EXEC sp_addlinkedserver
@server = 'SEATTLE Payroll',
@provider = 'MSDASQL',
@datasrc = 'LocalServer'
GO
-- OR to use no named parameters:
USE master
GO
EXEC sp_addlinkedserver
'SEATTLE Payroll',
'',
'MSDASQL',
'LocalServer'
GO
此示例創(chuàng)建一臺(tái)名為 LONDON Payroll 的鏈接服務(wù)器,該服務(wù)器使用用于 ODBC 的 Microsoft OLE DB 提供程序和 provider_string 參數(shù)。
說(shuō)明 有關(guān) ODBC 連接字符串的更多信息,請(qǐng)參見(jiàn) SQLDriverConnect 和如何分配句柄并與 SQL Server (ODBC) 連接。
USE master
GO
-- To use named parameters:
EXEC sp_addlinkedserver
@server = 'LONDON Payroll',
@provider = 'MSDASQL',
@provstr = 'DRIVER={SQL Server};SERVER=MyServer;UID=sa;PWD=;'
GO
-- OR to use no named parameters:
USE master
GO
EXEC sp_addlinkedserver
'LONDON Payroll',
'',
'MSDASQL',
NULL,
NULL,
'DRIVER={SQL Server};SERVER=MyServer;UID=sa;PWD=;'
GO
若要?jiǎng)?chuàng)建使用用于 Jet 的 Microsoft OLE DB 提供程序以訪(fǎng)問(wèn) Excel 電子表格的鏈接服務(wù)器定義,請(qǐng)首先在 Excel 中創(chuàng)建一個(gè)命名的范圍以指定要在 Excel 工作表中選擇的行和列。然后,可將此范圍的名稱(chēng)引用為分布式查詢(xún)中的表名稱(chēng)。
EXEC sp_addlinkedserver 'ExcelSource',
'Jet 4.0',
'Microsoft.Jet.OLEDB.4.0',
'c:\MyData\DistExcl.xls',
NULL,
'Excel 5.0'
GO
為了訪(fǎng)問(wèn) Excel 電子表格中的數(shù)據(jù),請(qǐng)將某個(gè)范圍內(nèi)的單元與某個(gè)名稱(chēng)相關(guān)聯(lián)。通過(guò)將范圍的名稱(chēng)用作表名稱(chēng),可以訪(fǎng)問(wèn)指定的已命名范圍。下列查詢(xún)利用前面設(shè)置的鏈接服務(wù)器,可訪(fǎng)問(wèn)稱(chēng)為 SalesData 的命名范圍。
SELECT *
FROM EXCEL...SalesData
GO
此示例創(chuàng)建一臺(tái)鏈接服務(wù)器,并且使用 OPENQUERY 從為檢索服務(wù)啟用的鏈接服務(wù)器和文件系統(tǒng)中檢索信息。
EXEC sp_addlinkedserver FileSystem,
'Index Server',
'MSIDXS',
'Web'
GO
USE pubs
GO
IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'yEmployees')
DROP TABLE yEmployees
GO
CREATE TABLE yEmployees
(
id int NOT NULL,
lname varchar(30) NOT NULL,
fname varchar(30) NOT NULL,
salary money,
hiredate datetime
)
GO
INSERT yEmployees VALUES
(
10,
'Fuller',
'Andrew',
$60000,
'9/12/98'
)
GO
IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS
WHERE TABLE_NAME = 'DistribFiles')
DROP VIEW DistribFiles
GO
CREATE VIEW DistribFiles
AS
SELECT *
FROM OPENQUERY(FileSystem,
'SELECT Directory,
FileName,
DocAuthor,
Size,
Create,
Write
FROM SCOPE('' "c:\My Documents" '')
WHERE CONTAINS(''Distributed'') > 0
AND FileName LIKE ''%.doc%'' ')
WHERE DATEPART(yy, Write) = 1998
GO
SELECT *
FROM DistribFiles
GO
SELECT Directory,
FileName,
DocAuthor,
hiredate
FROM DistribFiles D, yEmployees E
WHERE D.DocAuthor = E.FName + ' ' + E.LName
GO
此示例創(chuàng)建一臺(tái)直接訪(fǎng)問(wèn)文本文件的鏈接服務(wù)器,而沒(méi)有將這些文件鏈接為 Access .mdb 文件中的表。提供程序是 Microsoft.Jet.OLEDB.4.0,提供程序字符串為"Text"。
數(shù)據(jù)源是包含文本文件的目錄的完整路徑名。schema.ini 文件(描述文本文件的結(jié)構(gòu))必須與此文本文件存在于相同的目錄中。有關(guān)創(chuàng)建 schema.ini 文件的更多信息,請(qǐng)參見(jiàn) Jet 數(shù)據(jù)庫(kù)引擎文檔。
--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 4-part name
SELECT *
FROM txtsrv...[file1#txt]
下面的示例創(chuàng)建一臺(tái)名為 DB2 的鏈接服務(wù)器,該服務(wù)器使用用于 DB2 的 Microsoft OLE DB 提供程序。
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;Default Schema=admin;'
相關(guān)文章