OPENROWSET
包含訪問 OLE DB 資料來源中的遠端資料所需的全部串連資訊。當訪問連結的伺服器中的表時,這種方法是一種替代方法,並且是一種使用 OLE DB 串連並訪問遠端資料的一次性的、特殊的方法。可以在查詢的 FROM 子句中像參考資料表名那樣引用 OPENROWSET 函數。依據 OLE DB 提供者的能力,還可以將 OPENROWSET 函數引用為 INSERT、UPDATE 或 DELETE 語句的目標表。儘管查詢可能返回多個結果集,然而 OPENROWSET 只返回第一個。
文法
OPENROWSET ( 'provider_name'
, { 'datasource' ; 'user_id' ; 'password'
| 'provider_string' }
, { [ catalog.] [ schema.] object
| 'query' }
)
參數
'provider_name'
字串,它代表在註冊表中指定的 OLE DB 提供者的易記名稱。provider_name 沒有預設值。
'datasource'
字串常量,它對應著某個特定的 OLE DB 資料來源。datasource 是將被傳遞到提供者 IDBProperties 介面以初始化提供者的 DBPROP_INIT_DATASOURCE 屬性。通常,這個字串包含資料庫檔案的名稱、資料庫伺服器的名稱,或者提供者能理解的用於尋找資料庫的名稱。
'user_id'
字串常量,它是傳遞到指定 OLE DB 提供者的使用者名稱。user_id 為串連指定安全上下文,並將它作為 DBPROP_AUTH_USERID 屬性傳遞進來以初始化提供者。
'password'
字串常量,它是將被傳遞到 OLE DB 提供者的使用者密碼。當初始化提供者時,將 password 作為 DBPROP_AUTH_PASSWORD 屬性傳遞進來。
'provider_string'
提供者特定的連接字串,將它作為 DBPROP_INIT_PROVIDERSTRING 屬性傳遞進來以初始化 OLE DB 提供者。通常 provider_string 封裝初始化提供者所需的所有串連資訊。
catalog
目錄或資料庫的名稱,其中駐留著指定的對象。
schema
架構的名稱或指定對象的對象所有者名稱。
object
對象名稱,它唯一地標識出將要操作的對象。
'query'
是字串常量,發送到提供者並由提供者執行。Microsoft SQL Server 不處理該查詢,但處理由提供者返回的查詢結果(直接傳遞查詢)。對於有些提供者,它們並沒有通過表名而是通過命令語言表現自己的表格格式資料,那麼將直接傳遞查詢用於這些提供者是非常有用的。只要查詢提供者支援 OLE DB Command 對象及其強制介面,那麼在遠程伺服器上就支援直接傳遞查詢。有關更多資訊,請參見 SQL Server OLE DB 程式員參考。
注釋
如果 OLE DB 提供者在指定的資料來源中支援多個目錄和架構,那麼就需要目錄及架構名稱。如果 OLE DB 提供者並不支援目錄和架構,那麼可以省略 catalog 及 schema 的值。
如果提供者只支援架構名,那麼必須指定一個兩部分名稱,形式為 schema.object。如果提供者只支援目錄名,那麼必須指定一個三部分名稱,形式為 catalog.schema.object。
OPENROWSET 不接受參數變數。
許可權
OPENROWSET 許可權由傳遞到 OLE DB 提供者的使用者名稱的許可權確定。
樣本A. 將 OPENROWSET 與 SELECT 語句及用於 SQL Server 的 Microsoft OLE DB 提供者一起使用
下面的樣本使用用於 SQL Server 的 Microsoft OLE DB 提供者訪問 pubs 資料庫中的 authors 表,該資料庫在一個名為 seattle1 的遠程伺服器上。從 datasource、user_id 及 password 中初始化提供者,並且使用 SELECT 語句定義返回的行集。
USE pubsGOSELECT a.*FROM OPENROWSET('SQLOLEDB','seattle1';'sa';'MyPass', 'SELECT * FROM pubs.dbo.authors ORDER BY au_lname, au_fname') AS aGO
B. 將 OPENROWSET 與對象及用於 ODBC 的 OLE DB 提供者一起使用
下面的樣本使用用於 ODBC 的 OLE DB 提供者以及 SQL Server ODBC 驅動程式訪問 pubs 資料庫中的 authors 表,該資料庫在一個名為 seattle1 的遠程伺服器中。提供者用在 ODBC 提供者所用的 ODBC 文法中指定的 provider_string 進行初始化,定義返回的行集時使用 catalog.schema.object 文法。
USE pubsGOSELECT a.*FROM OPENROWSET('MSDASQL', 'DRIVER={SQL Server};SERVER=seattle1;UID=sa;PWD=MyPass', pubs.dbo.authors) AS aORDER BY a.au_lname, a.au_fnameGO
C. 使用用於 Jet 的 Microsoft OLE DB 提供者
下面的樣本通過用於 Jet 的 Microsoft OLE DB 提供者訪問 Microsoft Access Northwind 資料庫中的 orders 表。
說明 下面的樣本假定已經安裝了 Access。
USE pubsGOSELECT a.*FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'c:\MSOffice\Access\Samples\northwind.mdb';'admin';'mypwd', Orders) AS aGO
D. 使用 OPENROWSET 和 INNER JOIN 中的另一個表
下面的樣本從本地 SQL Server Northwind 資料庫的 customers 表中,以及儲存在相同電腦上 Access Northwind 資料庫的 orders 表中選擇所有資料
說明 下面的樣本假定已經安裝了 Access。
USE pubsGOSELECT c.*, o.*FROM Northwind.dbo.Customers AS c INNER JOIN OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'c:\MSOffice\Access\Samples\northwind.mdb';'admin';'mypwd', Orders) AS o