創(chuàng)建一個鏈接的服務(wù)器,使其允許對分布式的、針對 OLE DB 數(shù)據(jù)源的異類查詢進(jìn)行訪問。在使用 sp_addlinkedserver 創(chuàng)建鏈接的服務(wù)器之后,此服務(wù)器就可以執(zhí)行分布式查詢。如果鏈接服務(wù)器定義為 Microsoft® SQL Server™,則可執(zhí)行遠(yuǎn)程存儲過程。
sp_addlinkedserver [ @server = ] 'server'
[ , [ @srvproduct = ] 'product_name' ]
[ , [ @provider = ] 'provider_name' ]
[ , [ @datasrc = ] 'data_source' ]
[ , [ @location = ] 'location' ]
[ , [ @provstr = ] 'provider_string' ]
[ , [ @catalog = ] 'catalog' ]
[ @server = ] 'server'
要創(chuàng)建的鏈接服務(wù)器的本地名稱,server 的數(shù)據(jù)類型為 sysname,沒有默認(rèn)設(shè)置。
如果有多個 SQL Server 實例,server 可以為 servername\instancename。此鏈接的服務(wù)器可能會被引用為下面示例的數(shù)據(jù)源:
SELECT *FROM [servername\instancename.]pubs.dbo.authors.
如果未指定 data_source,則服務(wù)器為該實例的實際名稱。
[ @srvproduct = ] 'product_name'
要添加為鏈接服務(wù)器的 OLE DB 數(shù)據(jù)源的產(chǎn)品名稱。product_name 的數(shù)據(jù)類型為 nvarchar(128),默認(rèn)設(shè)置為 NULL。如果是 SQL Server,則不需要指定 provider_name、data_source、location、provider_string 以及目錄。
[ @provider = ] 'provider_name'
與此數(shù)據(jù)源相對應(yīng)的 OLE DB 提供程序的唯一程序標(biāo)識符 (PROGID)。provider_name 對于安裝在當(dāng)前計算機(jī)上指定的 OLE DB 提供程序必須是唯一的。provider_name 的數(shù)據(jù)類型為nvarchar(128),默認(rèn)設(shè)置為 NULL。OLE DB 提供程序應(yīng)該用給定的 PROGID 在注冊表中注冊。
[ @datasrc = ] 'data_source'
由 OLE DB 提供程序解釋的數(shù)據(jù)源名稱。data_source 的數(shù)據(jù)類型為 nvarchar(4000),默認(rèn)設(shè)置為 NULL。data_source 被當(dāng)作 DBPROP_INIT_DATASOURCE 屬性傳遞以便初始化 OLE DB 提供程序。
當(dāng)鏈接的服務(wù)器針對于 SQL Server OLE DB 提供程序創(chuàng)建時,可以按照 servername\instancename 的形式指定 data_source,它可以用來連接到運(yùn)行于特定計算機(jī)上的 SQL Server 的特定實例上。servername 是運(yùn)行 SQL Server 的計算機(jī)名稱,instancename 是用戶將被連接到的特定 SQL Server 實例的名稱。
[ @location = ] 'location'
OLE DB 提供程序所解釋的數(shù)據(jù)庫的位置。location 的數(shù)據(jù)類型為 nvarchar(4000),默認(rèn)設(shè)置為 NULL。location 作為 DBPROP_INIT_LOCATION 屬性傳遞以便初始化 OLE DB 提供程序。
[ @provstr = ] 'provider_string'
OLE DB 提供程序特定的連接字符串,它可標(biāo)識唯一的數(shù)據(jù)源。provider_string 的數(shù)據(jù)類型為 nvarchar(4000),默認(rèn)設(shè)置為 NULL。Provstr 作為 DBPROP_INIT_PROVIDERSTRING 屬性傳遞以便初始化 OLE DB 提供程序。
當(dāng)針對 Server OLE DB 提供程序提供了鏈接服務(wù)器后,可將 SERVER 關(guān)鍵字用作 SERVER=servername\instancename 來指定實例,以指定特定的 SQL Server 實例。servername 是 SQL Server 在其上運(yùn)行的計算機(jī)名稱,instancename 是用戶連接到的特定的 SQL Server 實例名稱。
[ @catalog = ] 'catalog'
建立 OLE DB 提供程序的連接時所使用的目錄。catalog 的數(shù)據(jù)類型為sysname,默認(rèn)設(shè)置為 NULL。catalog 作為 DBPROP_INIT_CATALOG 屬性傳遞以便初始化 OLE DB 提供程序。
0(成功)或 1(失?。?/P>
如果沒有指定參數(shù),則 sp_addlinkedserver 返回此消息:
Procedure 'sp_addlinkedserver' expects parameter '@server', which was not supplied.
使用適當(dāng) OLE DB 提供程序和參數(shù)的 sp_addlinkedserver 返回此消息:
Server added.
下表顯示為可通過 OLE DB 訪問的數(shù)據(jù)源設(shè)置鏈接服務(wù)器的方法。對于給定的數(shù)據(jù)源,可以使用多種方法為其設(shè)置鏈接服務(wù)器,下表中可能有不止一行適用于一種數(shù)據(jù)源類型。下表也顯示了用于設(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ò)名稱(用于默認(rèn)實例) | - | - | 數(shù)據(jù)庫名稱(可選) |
SQL Server | 用于 SQL Server 的 Microsoft OLE DB 提供程序 | - | SQLOLEDB | 服務(wù)器名\實例名(對于特定實例) | - | - | 數(shù)據(jù)庫名稱(可選) |
Oracle | 用于 Oracle 的 Microsoft OLE DB 提供程序 | 任何 (2) | MSDAORA | 用于 Oracle 數(shù)據(jù)庫的 SQL*Net 別名 | - | - | - |
Access/ Jet | 用于 Jet 的 Microsoft OLE DB 提供程序 | 任何 | Microsoft.Jet.OLEDB.4.0 | Jet 數(shù)據(jù)庫文件的完整路徑名 | - | - | - |
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ù)目錄名稱 | - | - | - |
Microsoft Excel 電子表格 | 用于 Jet 的 Microsoft OLE DB 提供程序 | 任何 | Microsoft.Jet.OLEDB.4.0 | Excel 文件的完整路徑名 | - | Excel 5.0 | - |
IBM DB2 數(shù)據(jù)庫 | 用于 DB2 的Microsoft OLE DB 提供程序 | 任何 | DB2OLEDB | - | - | 請參見用于 DB2 文檔的 Microsoft OLE DB 提供程序 | DB2 數(shù)據(jù)庫的目錄名 |
(1 ) 這種設(shè)置鏈接服務(wù)器的方式強(qiáng)制鏈接服務(wù)器的名稱與遠(yuǎn)程 SQL Server 的網(wǎng)絡(luò)名稱相同。使用 server 指定服務(wù)器。
(2 ) "任何"指產(chǎn)品名稱可以任意。
data_source、location、provider_string 和 catalog 參數(shù)標(biāo)識鏈接服務(wù)器指向的數(shù)據(jù)庫。如果任一參數(shù)為 NULL 值,則不設(shè)置相應(yīng)的 OLE DB 初始化屬性。
說明 若要在 SQL Server 6.x 版上使用 SQL Server 2000 版的 Microsoft OLE DB 提供程序,請在 6.x 版 SQL Server 上運(yùn)行 \Microsoft SQL Server\Install\Instcat.sql 腳本。此腳本對于在 SQL Server 6.x 服務(wù)器上運(yùn)行分布式查詢是基本的。
在群集環(huán)境中,當(dāng)指定指向 OLE DB 數(shù)據(jù)源的文件名時,應(yīng)使用通用命名規(guī)則 (UNC) 名稱或共享驅(qū)動器指定位置。
執(zhí)行許可權(quán)限默認(rèn)授予 sysadmin 和 setupadmin 固定服務(wù)器角色的成員。
下面的示例創(chuàng)建一臺名為 SEATTLESales 的鏈接服務(wù)器,該服務(wù)器使用用于 SQL Server 的 Microsoft OLE DB 提供程序。
USE master
GO
EXEC sp_addlinkedserver
'SEATTLESales',
N'SQL Server'
GO
此示例在 SQL Server 的實例上創(chuàng)建一臺名為 S1_instance1 的鏈接服務(wù)器,該服務(wù)器使用 SQL Server 的 Microsoft OLE DB 提供程序。
EXEC sp_addlinkedserver @server='S1_instance1', @srvproduct='',
@provider='SQLOLEDB', @datasrc='S1\instance1'
此示例創(chuàng)建一臺名為 SEATTLE Mktg 的鏈接服務(wù)器。
說明 本示例假設(shè)已經(jīng)安裝 Microsoft Access 和示例 Northwind 數(shù)據(jù)庫,且 Northwind 數(shù)據(jù)庫駐留在 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)建一臺名為 LONDON Mktg 的鏈接服務(wù)器,該服務(wù)器使用用于 Oracle 的 Microsoft OLE DB 提供程序,并且假設(shè)此 Oracle 數(shù)據(jù)庫的 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)建一臺名為 SEATTLE Payroll 的鏈接服務(wù)器,該服務(wù)器使用用于 ODBC 的 Microsoft OLE DB 提供程序和 data_source 參數(shù)。
說明 在執(zhí)行 sp_addlinkedserver 之前,必須在服務(wù)器上將指定的 ODBC 數(shù)據(jù)源名稱定義為系統(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)建一臺名為 LONDON Payroll 的鏈接服務(wù)器,該服務(wù)器使用用于 ODBC 的 Microsoft OLE DB 提供程序和 provider_string 參數(shù)。
說明 有關(guān) ODBC 連接字符串的更多信息,請參見 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
若要創(chuàng)建使用用于 Jet 的 Microsoft OLE DB 提供程序以訪問 Excel 電子表格的鏈接服務(wù)器定義,請首先在 Excel 中創(chuàng)建一個命名的范圍以指定要在 Excel 工作表中選擇的行和列。然后,可將此范圍的名稱引用為分布式查詢中的表名稱。
EXEC sp_addlinkedserver 'ExcelSource',
'Jet 4.0',
'Microsoft.Jet.OLEDB.4.0',
'c:\MyData\DistExcl.xls',
NULL,
'Excel 5.0'
GO
為了訪問 Excel 電子表格中的數(shù)據(jù),請將某個范圍內(nèi)的單元與某個名稱相關(guān)聯(lián)。通過將范圍的名稱用作表名稱,可以訪問指定的已命名范圍。下列查詢利用前面設(shè)置的鏈接服務(wù)器,可訪問稱為 SalesData 的命名范圍。
SELECT *
FROM EXCEL...SalesData
GO
此示例創(chuàng)建一臺鏈接服務(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)建一臺直接訪問文本文件的鏈接服務(wù)器,而沒有將這些文件鏈接為 Access .mdb 文件中的表。提供程序是 Microsoft.Jet.OLEDB.4.0,提供程序字符串為"Text"。
數(shù)據(jù)源是包含文本文件的目錄的完整路徑名。schema.ini 文件(描述文本文件的結(jié)構(gòu))必須與此文本文件存在于相同的目錄中。有關(guān)創(chuàng)建 schema.ini 文件的更多信息,請參見 Jet 數(shù)據(jù)庫引擎文檔。
--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)建一臺名為 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)文章