sp_addlinkedserver (Transact-SQL)

來源:互聯網
上載者:User
文章目錄
  • A. 使用 Microsoft SQL Server Native Client OLE DB 提供者
  • B. 使用 Microsoft OLE DB Provider for Microsoft Access
  • 使用 Microsoft OLE DB Provider for Oracle
  • D. 將 Microsoft OLE DB Provider for ODBC 與 data_source 參數一起使用
  • E. 將 Microsoft OLE DB Provider 用於 Excel 試算表
  • H. 使用 Microsoft OLE DB Provider for Jet 訪問文字檔
  • I. 使用 Microsoft OLE DB Provider for DB2

建立連結的伺服器。連結的伺服器讓使用者可以對 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 '

要建立的連結的伺服器的名稱。server 的資料類型為 sysname,沒有預設值。

[ @srvproduct = ] ' product_name '

要添加為連結的伺服器的 OLE DB 資料來源的產品名稱。product_name 的資料類型為 nvarchar(128),預設值為 NULL。如果為 SQL Server,則不必指定 provider_namedata_sourcelocationprovider_stringcatalog

[ @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 執行個體的名稱。

注意:
若要訪問鏡像資料庫,則連接字串必須包含資料庫名稱。該名稱是資料提供者啟用容錯移轉嘗試所必需的。可以在 @provstr@catalog 參數中指定資料庫。此外,連接字串還可以提供容錯移轉夥伴名稱。有關詳細資料,請參閱建立到資料庫鏡像會話的初始串連。
[ @catalog = ] ' catalog '

與 OLE DB 提供者建立串連時所使用的目錄。catalog 的資料類型為 sysname,預設值為 NULL。catalog 作為 DBPROP_INIT_CATALOG 屬性傳遞以初始化 OLE DB 提供者。在針對 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 Server Native Client OLE DB 提供者

SQL Server 1(預設值)

 

 

 

 

 

SQL Server

Microsoft SQL Server Native Client OLE DB 提供者

 

SQLNCLI

SQL Server 的網路名稱(用於預設執行個體)

 

 

資料庫名稱(可選)

SQL Server

Microsoft SQL Server Native Client OLE DB 提供者

 

SQLNCLI

servername\instancename(用於特定執行個體)

 

 

資料庫名稱(可選)

Oracle

Microsoft OLE DB Provider for Oracle

任何2

MSDAORA

用於 Oracle 資料庫的 SQL*Net 別名

 

 

 

Oracle,版本 8 及更高版本

Oracle Provider for OLE DB

任何

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 Server Native Client OLE DB 提供者將是用於 SQL Server 的提供者。即使指定了較早版本的提供者名稱 SQLOLEDB,在儲存到目錄時該名稱也將改為 SQLNCLI。

data_sourcelocationprovider_stringcatalog 參數標識連結的伺服器所指向的一個或多個資料庫。如果其中任一參數為 NULL,則不設定相應的 OLE DB 初始化屬性。

在群集環境中,當指定指向 OLE DB 資料來源的檔案名稱時,應使用通用命名規則 (UNC) 名稱或共用磁碟機指定位置。

不能在使用者定義的事務內執行 sp_addlinkedserver

安全記事:
如果使用 sp_addlinkedserver 建立連結的伺服器,則將為所有本地登入添加預設自映射。對於非 SQL Server 提供者,通過 SQL Server 驗證的登入名稱也許能夠以 SQL Server 服務帳戶身份訪問該提供者。管理員應考慮使用 sp_droplinkedsrvlogin <linkedserver_name>, NULL 刪除全域對應。

 許可權

要求具有 ALTER ANY LINKED SERVER 許可權。

 樣本 A. 使用 Microsoft SQL Server Native Client OLE DB 提供者

下面的樣本將建立一個名為 SEATTLESales 的連結的伺服器。產品名稱為 SQL Server,未使用提供者名稱。

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

下例使用 SQL Server Native Client OLE DB 提供者在 SQL Server 執行個體中建立連結的伺服器 S1_instance1

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

B. 使用 Microsoft OLE DB Provider for Microsoft Access

Microsoft.Jet.OLEDB.4.0 提供者串連到使用 2002-2003 格式的 Microsoft Access 資料庫。下面的樣本將建立一個名為 SEATTLE Mktg 的連結的伺服器。

注意:
該樣本假設已安裝 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

Microsoft.ACE.OLEDB.12.0 提供者串連到使用 2007 格式的 Microsoft Access 資料庫。下面的樣本將建立一個名為 SEATTLE Mktg 的連結的伺服器。

注意:
該樣本假設已安裝 Microsoft Access 和 Northwind 樣本資料庫,並且 Northwind 資料庫位於 C:\Msoffice\Access\Samples 中。

EXEC sp_addlinkedserver 
@server = 'SEATTLE Mktg',
@provider = Microsoft.ACE.OLEDB.12.0',
@srvproduct = 'OLE DB Provider for ACE',
@datasrc = 'C:\MSOffice\Access\Samples\Northwind.accdb'
GO

使用 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. 將 Microsoft OLE DB Provider for ODBC 與 data_source 參數一起使用

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

注意:
在使用該連結的伺服器之前,必須在該伺服器中將指定的 ODBC 資料來源名稱定義為系統 DSN。

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

E. 將 Microsoft OLE DB Provider 用於 Excel 試算表

若 要建立使用 Microsoft OLE DB Provider for Jet 訪問 1997 - 2003 格式的 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'

若要串連到 Excel 2007 格式的 Excel 試算表,請使用 ACE 提供者。

EXEC sp_addlinkedserver @server = N'ExcelDataSource', 
@srvproduct=N'ExcelData', @provider=N'Microsoft.ACE.OLEDB.12.0',
@datasrc=N'C:\DataFolder\People.xlsx',
@provstr='EXCEL 12.0' ;

H. 使用 Microsoft OLE DB Provider for Jet 訪問文字檔

以下樣本建立直接存取文字檔的連結的伺服器,而沒有將這些檔案連結為 Access .mdb 檔案中的表。提供者為 Microsoft.Jet.OLEDB.4.0,提供者字串為 Text

資料來源是包含文字檔的目錄的完整路徑。schema.ini 檔案(描述文字檔的結構)必須與此文字檔存在於相同的目錄中。有關如何建立 Schema.ini 檔案的詳細資料,請參閱 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 *
FROM txtsrv...[file1#txt]

I. 使用 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 提供者

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.