sp_addlinkedserver (Transact-SQL)
創建鏈接服務器。鏈接服務器讓用戶可以對 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,沒有默認值。
要添加為鏈接服務器的 OLE DB 數據源的產品名稱。product_name 的數據類型為 nvarchar(128),默認值為 NULL。如果為 SQL Server,則不必指定 provider_name、data_source、location、provider_string 和 catalog。
與此數據源對應的 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 在注冊表中注冊。
由 OLE DB 訪問接口解釋的數據源的名稱。data_source 的數據類型為 nvarchar(4000)。data_source 作為 DBPROP_INIT_DATASOURCE 屬性傳遞以初始化 OLE DB 訪問接口。
由 OLE DB 訪問接口解釋的數據庫的位置。location 的數據類型為 nvarchar(4000),默認值為 NULL。location 作為 DBPROP_INIT_LOCATION 屬性傳遞以初始化 OLE DB 訪問接口。
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 參數中指定數據庫。此外,連接字符串還可以提供故障轉移伙伴名稱。有關詳細信息,請參閱建立到數據庫鏡像會話的初始連接。 |
與 OLE DB 訪問接口建立連接時所使用的目錄。catalog 的數據類型為 sysname,默認值為 NULL。catalog 作為 DBPROP_INIT_CATALOG 屬性傳遞以初始化 OLE DB 訪問接口。在針對 SQL Server 實例定義鏈接服務器時,目錄指向鏈接服務器映射到的默認數據庫。
0(成功)或 1(失敗)
?結果集無。
?注釋下表顯示為能通過 OLE DB 訪問數據源而建立鏈接服務器的方法。對于特定的數據源,可以使用多種方法為其設置鏈接服務器;該表中可能有多行適用于一種數據源類型。該表還顯示了用于設置鏈接服務器的 sp_addlinkedserver 參數值。
| 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_source、location、provider_string 和 catalog 參數標識鏈接服務器所指向的一個或多個數據庫。如果其中任一參數為 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 中。 |
@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 中。 |
@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。 |
@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 訪問接口
總結
以上是生活随笔為你收集整理的sp_addlinkedserver (Transact-SQL)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DataColor的SnowLeopar
- 下一篇: MYSQL 与 Oracle 之间的数据