SQL2005 跨庫查詢方法

OPENDATASOURCE (Transact-SQL)
OPENDATASOURCE ( provider_name, init_string )
參數
provider_name

註冊爲用於訪問數據源的 OLE DB 訪問接口的 PROGID 的名稱。provider_name 的數據類型爲 char,無默認值。

init_string

連接字符串,該字符串將要傳遞給目標提供程序的 IDataInitialize 接口。提供程序字符串語法是以關鍵字值對爲基礎的,這些關鍵字值對由分號隔開,例如:“keyword1=value; keyword2=value”。

若要了解提供程序上支持的特定關鍵字值對,請參閱 Microsoft Data Access SDK。該文檔定義了基本語法。下表列出了 init_string 參數中最常用的關鍵字。

關鍵字 OLE DB 屬性 有效值和說明

數據源

DBPROP_INIT_DATASOURCE

要連接的數據源的名稱。不同的提供程序用不同的方法對此進行解釋。對於 SQL 本機客戶端 OLE DB 訪問接口來說,這指示服務器的名稱。對於 Jet OLE DB 訪問接口來說,這指示 .mdb 文件或 .xls 文件的完整路徑。

位置

DBPROP_INIT_LOCATION

要連接的數據庫的位置。

擴展屬性

DBPROP_INIT_PROVIDERSTRING

提供程序特定的連接字符串。

連接超時

DBPROP_INIT_TIMEOUT

達到該超時值後,連接嘗試將失敗。

用戶 ID

DBPROP_AUTH_USERID

用於該連接的用戶 ID。

密碼

DBPROP_AUTH_PASSWORD

用於該連接的密碼。

目錄

DBPROP_INIT_CATALOG

連接到數據源時的初始或默認的目錄名稱。

集成安全性

DBPROP_AUTH_INTEGRATED

SSPI,指定 Windows 身份驗證

僅當 DisallowAdhocAccess 註冊表選項針對指定的提供程序顯式設置爲 0,並且啓用 Ad Hoc Distributed Queries 高級配置選項時,OPENDATASOURCE 纔可用於訪問 OLE DB 數據源中的遠程數據。如果未設置這些選項,則默認行爲不允許即席訪問。

OPENDATASOURCE 函數可以在能夠使用鏈接服務器名的相同 Transact-SQL 語法位置中使用。因此,可以將 OPENDATASOURCE 用作四部分名稱的第一部分,該部分名稱引用 SELECT、INSERT、UPDATE 或 DELETE 語句中的表或視圖的名稱;或者引用 EXECUTE 語句中的遠程存儲過程。當執行遠程存儲過程時,OPENDATASOURCE 應該引用 SQL Server 的另一個實例。OPENDATASOURCE 不接受參數變量。

與 OPENROWSET 函數類似,OPENDATASOURCE 應該只引用那些不經常訪問的 OLE DB 數據源。對於訪問次數較頻繁的任何數據源,請爲它們定義鏈接服務器。無論 OPENDATASOURCE 還是 OPENROWSET 都不能提供鏈接服務器定義的全部功能,例如,安全管理以及查詢目錄信息的功能。每次調用 OPENDATASOURCE 時,都必須提供所有的連接信息(包括密碼)。

重要提示:
Windows 身份驗證比 SQL Server 身份驗證更加安全。應儘量使用 Windows 身份驗證。OPENDATASOURCE 不應該用於連接字符串中的顯式密碼。

 

 

任何用戶都可以執行 OPENDATASOURCE。用於連接到遠程服務器的權限由連接字符串確定。

以下示例將創建與服務器 London 上的 SQL Server 實例 Payroll 的即席連接,並查詢 AdventureWorks.HumanResources.Employee 表。

SELECT *
FROM OPENDATASOURCE('SQLNCLI',
'Data Source=London/Payroll;Integrated Security=SSPI')
.AdventureWorks.HumanResources.Employee
 
 
sp_addlinkedserver (Transact-SQL)

創建鏈接服務器。鏈接服務器讓用戶可以對 OLE DB 數據源進行分佈式異類查詢。在使用 sp_addlinkedserver 創建鏈接服務器後,
可對該服務器運行分佈式查詢。如果鏈接服務器定義爲 SQL Server 實例,則可執行遠程存儲過程。
語法

 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 本機 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 本機客戶端 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(失敗)

 

 

 

 

不使用鏈接的服務器名,而提供特殊的連接信息,並將其作爲四部分對象名的一部分。

語法

OPENDATASOURCE ( provider_name, init_string )

參數

provider_name

註冊爲用於訪問數據源的 OLE DB 提供程序的 PROGID 的名稱。provider_name 的數據類型爲 char,沒有默認值。

init_string

連接字符串,這些字符串將要傳遞給目標提供程序的 IDataInitialize 接口。提供程序字符串語法是以關鍵字值對爲基礎的,這些關鍵字值對由分號隔開,例如:"keyword1=value; keyword2=value."

在 Microsoft® Data Access SDK 中定義了基本語法。有關所支持的特定關鍵字值對的信息,請參見提供程序中的文檔。下表列出 init_string 參數中最常用的關鍵字。

關鍵字OLE DB 屬性有效值和描述
數據源 DBPROP_INIT_DATASOURCE 要連接的數據源的名稱。不同的提供程序用不同的方法對此進行解釋。對於 SQL Server OLE DB 提供程序來說,這會指明服務器的名稱。對於 Jet OLE DB 提供程序來說,這會指明 .mdb 文件或 .xls 文件的完整路徑。
位置 DBPROP_INIT_LOCATION 要連接的數據庫的位置。
擴展屬性 DBPROP_INIT_PROVIDERSTRING 提供程序特定的連接字符串。
連接超時 DBPROP_INIT_TIMEOUT 超時值,在該超時值後,連接嘗試將失敗。
用戶 ID DBPROP_AUTH_USERID 用於該連接的用戶 ID。
密碼 DBPROP_AUTH_PASSWORD 用於該連接的密碼。
目錄 DBPROP_INIT_CATALOG 連接到數據源時的初始或默認的目錄名稱。
註釋

OPENDATASOURCE 函數可以在能夠使用鏈接服務器名的相同 Transact-SQL 語法位置中使用。因此,就可以將 OPENDATASOURCE 用作四部分名稱的第一部分,該名稱指的是 SELECT、INSERT、UPDATE 或 DELETE 語句中的表或視圖的名稱;或者指的是 EXECUTE 語句中的遠程存儲過程。當執行遠程存儲過程時,OPENDATASOURCE 應該指的是另一個 SQL Server。OPENDATASOURCE 不接受參數變量。

與 OPENROWSET 函數類似,OPENDATASOURCE 應該只引用那些不經常訪問的 OLE DB 數據源。對於訪問次數稍多的任何數據源,請爲它們定義鏈接的服務器。無論 OPENDATASOURCE 還是 OPENROWSET 都不能提供鏈接的服務器定義的全部功能,例如,安全管理以及查詢目錄信息的能力。每次調用 OPENDATASOURCE 時,都必須提供所有的連接信息(包括密碼)。

示例

下面的示例訪問來自某個表的數據,該表在 SQL Server 的另一個實例中。

SELECT   *
FROM      OPENDATASOURCE(
         'SQLOLEDB',
         'Data Source=ServerName;User ID=MyUID;Password=MyPass'
         ).Northwind.dbo.Categories

下面是個查詢的示例,它通過用於 Jet 的 OLE DB 提供程序查詢 Excel 電子表格。

SELECT * 
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
  'Data Source="c:/Finance/account.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章