共用方式為


sp_addlinkedserver (Transact-SQL)

更新: 2006 年 12 月 12 日

建立連結伺服器。連結伺服器可讓您對 OLE DB 資料來源存取分散式異質性查詢。當您使用 sp_addlinkedserver 建立連結伺服器之後,即可對這部伺服器執行分散式查詢。如果連結伺服器被定義為 SQL Server 的執行個體,就可以執行遠端預存程序。

主題連結圖示Transact-SQL 語法慣例

語法

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

引數

  • [ @server= ] 'server'
    這是您要建立的連結伺服器名稱。serversysname,沒有預設值。
  • [ @srvproduct= ] 'product_name'
    這是要當做連結伺服器加入的 OLE DB 資料來源產品名稱。product_namenvarchar(128),預設值是 NULL。如果是 SQL Server,則不必指定 provider_namedata_sourcelocationprovider_stringcatalog
  • [ @provider= ] 'provider_name'
    這是對應於這個資料來源之 OLE DB 提供者的唯一程式化識別碼 (PROGID)。provider_name 對於安裝在目前電腦上的指定 OLE DB 提供者來說,必須是唯一的。provider_namenvarchar(128),預設值是 NULL;但是,如果省略 provider_name,就使用 SQLNCLI。SQLNCLI 是 SQL Native Client OLE DB 提供者。OLE DB 提供者預期要登錄在登錄中的指定 PROGID。
  • [ @datasrc= ] 'data_source'
    這是 OLE DB 提供者所解譯的資料來源名稱。data_sourcenvarchar(4000)data_source 被當做將 OLE DB 提供者初始化所用的 DBPROP_INIT_DATASOURCE 屬性加以傳送。
  • [ @location= ] 'location'
    這是 OLE DB 提供者解譯的資料庫位置。locationnvarchar(4000),預設值是 NULL。location 被當做將 OLE DB 提供者初始化所用的 DBPROP_INIT_LOCATION 屬性加以傳送。
  • [ @provstr= ] 'provider_string'
    這是 OLE DB 提供者特定的連接字串,用來識別唯一資料來源。provider_stringnvarchar(4000),預設值是 NULL。provstr 可以傳遞到 IDataInitialize,或者設為 DBPROP_INIT_PROVIDERSTRING 屬性,將 OLE DB 提供者初始化。

    當您對 SQL Native Client OLE DB 提供者建立連結伺服器時,可以把 SERVER=servername\instancename 作為 SERVER 關鍵字,指定一個特定的 SQL Server 執行個體。servername 是執行 SQL Server 的電腦名稱,instancename 是使用者要連接的特定 SQL Server 執行個體名稱。

    ms190479.note(zh-tw,SQL.90).gif附註:
    若要存取鏡像資料庫,連接字串必須包含資料庫名稱。這個名稱是讓資料存取提供者進行容錯移轉嘗試必要的名稱。資料庫可以在 @provstr@catalog 參數中指定。此外,連接字串也可以提供容錯移轉夥伴名稱。如需詳細資訊,請參閱<建立資料庫鏡像工作階段的初始連接>。
  • [ @catalog= ] 'catalog'
    這是連接 OLE DB 提供者時所用的目錄。catalogsysname,預設值是 NULL。catalog 被當做將 OLE DB 提供者初始化所用的 DBPROP_INIT_CATALOG 屬性加以傳送。當您對 SQL Server 的執行個體定義連結伺服器時,目錄會參考連結伺服器所對應的預設資料庫。

傳回碼值

0 (成功) 或 1 (失敗)

結果集

無。

備註

下表所顯示的,是針對可以透過 OLE DB 來存取的資料來源,設定連結伺服器的方法。您可以對一個特定的資料來源,用一個以上的方法來設定連結伺服器;一個資料來源類型可以有一個以上的資料列。這份資料表也會顯示設定連結伺服器所用的 sp_addlinkedserver 參數值。

遠端 OLE DB 資料來源 OLE DB 提供者 product_name provider_name data_source location provider_string catalog

SQL Server

Microsoft SQL Native Client OLE DB Provider

SQL Server 1 (預設值)

 

 

 

 

 

SQL Server

Microsoft SQL Native Client OLE DB Provider

 

SQLNCLI

SQL Server 的網路名稱 (針對預設執行個體)

 

 

資料庫名稱 (選擇性)

SQL Server

Microsoft SQL Native Client OLE DB Provider

 

SQLNCLI

servername\instancename (針對特定的執行個體)

 

 

資料庫名稱 (選擇性)

Oracle

Microsoft OLE DB Provider for Oracle

任何2

MSDAORA

Oracle 資料庫的 SQL*Net 別名

 

 

 

Oracle 第 8 版和更新的版本

OLE DB 的 Oracle 提供者

任何

OraOLEDB.Oracle

Oracle 資料庫的別名

 

 

 

Access/Jet

Microsoft OLE DB Provider for Jet

任何

Microsoft.Jet.OLEDB.4.0

Jet 資料庫檔案的完整路徑

 

 

 

ODBC 資料來源

Microsoft OLE DB Provider for ODBC

任何

MSDASQL

ODBC 資料來源的系統 DSN

 

 

 

ODBC 資料來源

Microsoft OLE DB Provider for ODBC

任何

MSDASQL

 

 

ODBC 連接字串

 

檔案系統

Microsoft OLE DB Provider for Indexing Service

任何

MSIDXS

索引服務目錄名稱

 

 

 

Microsoft Excel 試算表

Microsoft OLE DB Provider for Jet

任何

Microsoft.Jet.OLEDB.4.0

Excel 檔的完整路徑

 

Excel 5.0

 

IBM DB2 資料庫

Microsoft OLE DB Provider for DB2

任何

DB2OLEDB

 

 

請參閱 Microsoft OLE DB Provider for DB2 文件集。

DB2 資料庫的目錄名稱

1這個設定連結伺服器的方法,會強迫連結伺服器與 SQL Server 遠端執行個體的網路同名。請使用 data_source 來指定伺服器。

2「任何」表示產品名稱不拘。

如果未指定任何提供者名稱,或者如果指定 SQL Server 作為產品名稱,則 Microsoft SQL Native Client OLE DB Provider (SQLNCLI) 就是搭配 SQL Server 2005 使用的提供者。即使您指定較早的提供者名稱 SQLOLEDB,它也會在保存到目錄時,改為 SQLNCLI。

data_sourcelocationprovider_stringcatalog 參數會識別連結伺服器所指向的資料庫。如果這些參數有任何一個是 NULL,就不會設定對應的 OLE DB 初始化屬性。

在群集環境中,當您指定讓檔名指向 OLE DB 資料來源時,請使用通用命名慣例名稱 (UNC) 或共用磁碟機來指定位置。

sp_addlinkedserver 無法在使用者自訂交易中執行。

ms190479.security(zh-tw,SQL.90).gif安全性注意事項:
當您使用 sp_addlinkedserver 來建立連結伺服器時,會加入預設的自我對應,供所有的本機登入使用。如果是非 SQL Server 提供者,SQL Server 驗證的登入也許可以利用 SQL Server 服務帳戶,取得該提供者的存取權。管理員應該考慮使用 sp_droplinkedsrvlogin <linkedserver_name>, NULL 來移除全域對應。

權限

需要 ALTER ANY LINKED SERVER 權限。

範例

A. 使用 Microsoft SQL Native Client OLE DB Provider

下列範例會建立一個名叫 SEATTLESales 的連結伺服器。產品名稱是 SQL Server,另外,不使用任何提供者名稱。

USE master;
GO
EXEC sp_addlinkedserver 
   'SEATTLESales',
   N'SQL Server'
GO

下列範例會利用 SQL Native Client OLE DB 提供者 (SQLNCLI),在 SQL Server 執行個體建立一個連結伺服器 S1_instance1

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

B. 使用 Microsoft OLE DB Provider for Jet

下列範例會建立一個連結伺服器,名叫 SEATTLE Mktg

ms190479.note(zh-tw,SQL.90).gif附註:
這個範例假設 Microsoft Access 和範例 Northwind 資料庫皆已安裝,而且 Northwind 資料庫位於 C:\Msoffice\Access\Samples。
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

C. 使用 Microsoft OLE DB Provider for Oracle

下列範例會建立一個名叫 LONDON Mktg 的連結伺服器,該連結伺服器是使用 Microsoft OLE DB Provider for Oracle,並且假設 Oracle 資料庫的 SQL*Net 別名為 MyServer

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

D. 搭配 data_source 參數來使用 Microsoft OLE DB Provider for ODBC

下列範例會建立一個名叫 SEATTLE Payroll 的連結伺服器,該連結伺服器是使用 Microsoft OLE DB Provider for ODBC (MSDASQL) 以及 data_source 參數。

ms190479.note(zh-tw,SQL.90).gif附註:
您必須先在伺服器中,將指定的 ODBC 資料來源名稱定義為系統 DSN,才可以使用該連結伺服器。
EXEC sp_addlinkedserver 
   @server = 'SEATTLE Payroll', 
   @srvproduct = '',
   @provider = 'MSDASQL', 
   @datasrc = 'LocalServer'
GO

E. 在 Excel 試算表中使用 Microsoft OLE DB Provider for Jet

若要利用 Microsoft OLE DB Provider for Jet 來建立連結伺服器定義,以存取 Excel 試算表,必須先指定您要選取的 Excel 工作表資料行和資料列,在 Excel 中建立一個具名範圍。然後才能在分散式查詢中,將該範圍的名稱參考為資料表名稱。

EXEC sp_addlinkedserver 'ExcelSource',
   'Jet 4.0',
   'Microsoft.Jet.OLEDB.4.0',
   'c:\MyData\DistExcl.xls',
   NULL,
   'Excel 5.0'
GO

若要存取 Excel 試算表中的資料,請建立資料格範圍與某個名稱的關聯性。您可以利用先前設定的連結伺服器,以下列查詢存取作為資料表使用的指定具名範圍 SalesData

SELECT *
   FROM ExcelSource...SalesData
GO

如果 SQL Server 是以一個有權存取遠端共用區的網域帳戶來執行,即可改用 UNC 路徑來取代對應的磁碟機。

EXEC sp_addlinkedserver 'ExcelShare',
   'Jet 4.0',
   'Microsoft.Jet.OLEDB.4.0',
   '\\MyServer\MyShare\Spreadsheets\DistExcl.xls',
   NULL,
   'Excel 5.0'

F. 使用 Microsoft OLE DB Provider for Jet 來存取文字檔

下列範例會建立一個連結伺服器,直接存取文字檔,而不將這些檔案當做 Access .mdb 檔中的資料表加以連結。提供者是 Microsoft.Jet.OLEDB.4.0,而提供者字串是 Text

資料來源是包含這些文字檔之目錄的完整路徑。描述文字檔結構的 schema.ini 檔,必須與文字檔置於同一個目錄下。如需有關如何建立 Schema.ini 檔的詳細資訊,請參閱 Jet Database Engine 文件集。

--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 * 
FROM txtsrv...[file1#txt]

G. 使用 Microsoft OLE DB Provider for DB2

下列範例會建立一個名叫 DB2 的連結伺服器,該連結伺服器是使用 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;
       Default Schema=admin;'

請參閱

參考

分散式查詢預存程序 (Transact-SQL)
sp_addlinkedsrvlogin (Transact-SQL)
sp_addserver (Transact-SQL)
sp_dropserver (Transact-SQL)
sp_serveroption (Transact-SQL)
sp_setnetname (Transact-SQL)
系統預存程序 (Transact-SQL)
系統資料表 (Transact-SQL)

其他資源

設定委派之連結的伺服器
以 SQL Server 測試 OLE DB 提供者

說明及資訊

取得 SQL Server 2005 協助

變更歷程記錄

版本 歷程記錄

2006 年 12 月 12 日

新增內容:
  • 新增有關 @provstr 描述的附註。