包含訪問 OLE DB 數(shù)據(jù)源中的遠(yuǎn)程數(shù)據(jù)所需的全部連接信息。當(dāng)訪問鏈接服務(wù)器中的表時,這種方法是一種替代方法,并且是一種使用 OLE DB 連接并訪問遠(yuǎn)程數(shù)據(jù)的一次性的、特殊的方法。可以在查詢的 FROM 子句中像引用表名那樣引用 OPENROWSET 函數(shù)。依據(jù) OLE DB 提供程序的能力,還可以將 OPENROWSET 函數(shù)引用為 INSERT、UPDATE 或 DELETE 語句的目標(biāo)表。盡管查詢可能返回多個結(jié)果集,然而 OPENROWSET 只返回第一個。
OPENROWSET ( 'provider_name'
, { 'datasource' ; 'user_id' ; 'password'
| 'provider_string' }
, { [ catalog.] [ schema.] object
| 'query' }
)
'provider_name'
字符串,它代表在注冊表中指定的 OLE DB 提供程序的友好名。provider_name 沒有默認(rèn)值。
'datasource'
字符串常量,它對應(yīng)著某個特定的 OLE DB 數(shù)據(jù)源。datasource 是將被傳遞到提供程序 IDBProperties 接口以初始化提供程序的 DBPROP_INIT_DATASOURCE 屬性。通常,這個字符串包含數(shù)據(jù)庫文件的名稱、數(shù)據(jù)庫服務(wù)器的名稱,或者提供程序能理解的用于查找數(shù)據(jù)庫的名稱。
'user_id'
字符串常量,它是傳遞到指定 OLE DB 提供程序的用戶名。user_id 為連接指定安全上下文,并將它作為 DBPROP_AUTH_USERID 屬性傳遞進來以初始化提供程序。
'password'
字符串常量,它是將被傳遞到 OLE DB 提供程序的用戶密碼。當(dāng)初始化提供程序時,將 password 作為 DBPROP_AUTH_PASSWORD 屬性傳遞進來。
'provider_string'
提供程序特定的連接字符串,將它作為 DBPROP_INIT_PROVIDERSTRING 屬性傳遞進來以初始化 OLE DB 提供程序。通常 provider_string 封裝初始化提供程序所需的所有連接信息。
catalog
目錄或數(shù)據(jù)庫的名稱,其中駐留著指定的對象。
schema
架構(gòu)的名稱或指定對象的對象所有者名稱。
object
對象名稱,它唯一地標(biāo)識出將要操作的對象。
'query'
是字符串常量,發(fā)送到提供程序并由提供程序執(zhí)行。Microsoft® SQL Server™ 不處理該查詢,但處理由提供程序返回的查詢結(jié)果(直接傳遞查詢)。對于有些提供程序,它們并沒有通過表名而是通過命令語言表現(xiàn)自己的表格格式數(shù)據(jù),那么將直接傳遞查詢用于這些提供程序是非常有用的。只要查詢提供程序支持 OLE DB Command 對象及其強制接口,那么在遠(yuǎn)程服務(wù)器上就支持直接傳遞查詢。有關(guān)更多信息,請參見 SQL Server OLE DB 程序員參考。
如果 OLE DB 提供程序在指定的數(shù)據(jù)源中支持多個目錄和架構(gòu),那么就需要目錄及架構(gòu)名稱。如果 OLE DB 提供程序并不支持目錄和架構(gòu),那么可以省略 catalog 及 schema 的值。
如果提供程序只支持架構(gòu)名,那么必須指定一個兩部分名稱,形式為 schema.object。如果提供程序只支持目錄名,那么必須指定一個三部分名稱,形式為 catalog.schema.object。
OPENROWSET 不接受參數(shù)變量。
OPENROWSET 權(quán)限由傳遞到 OLE DB 提供程序的用戶名的權(quán)限確定。
下面的示例使用用于 SQL Server 的 Microsoft OLE DB 提供程序訪問 pubs 數(shù)據(jù)庫中的 authors 表,該數(shù)據(jù)庫在一個名為 seattle1 的遠(yuǎn)程服務(wù)器上。從 datasource、user_id 及 password 中初始化提供程序,并且使用 SELECT 語句定義返回的行集。
USE pubs
GO
SELECT a.*
FROM OPENROWSET('SQLOLEDB','seattle1';'sa';'MyPass',
'SELECT * FROM pubs.dbo.authors ORDER BY au_lname, au_fname') AS a
GO
下面的示例使用用于 ODBC 的 OLE DB 提供程序以及 SQL Server ODBC 驅(qū)動程序訪問 pubs 數(shù)據(jù)庫中的 authors 表,該數(shù)據(jù)庫在一個名為 seattle1 的遠(yuǎn)程服務(wù)器中。提供程序用在 ODBC 提供程序所用的 ODBC 語法中指定的 provider_string 進行初始化,定義返回的行集時使用 catalog.schema.object 語法。
USE pubs
GO
SELECT a.*
FROM OPENROWSET('MSDASQL',
'DRIVER={SQL Server};SERVER=seattle1;UID=sa;PWD=MyPass',
pubs.dbo.authors) AS a
ORDER BY a.au_lname, a.au_fname
GO
下面的示例通過用于 Jet 的 Microsoft OLE DB 提供程序訪問 Microsoft Access Northwind 數(shù)據(jù)庫中的 orders 表。
說明 下面的示例假定已經(jīng)安裝了 Access。
USE pubs
GO
SELECT a.*
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'c:\MSOffice\Access\Samples\northwind.mdb';'admin';'mypwd', Orders)
AS a
GO
下面的示例從本地 SQL Server Northwind 數(shù)據(jù)庫的 customers 表中,以及存儲在相同計算機上 Access Northwind 數(shù)據(jù)庫的 orders 表中選擇所有數(shù)據(jù)
說明 下面的示例假定已經(jīng)安裝了 Access。
USE pubs相關(guān)文章
GO
SELECT 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
ON c.CustomerID = o.CustomerID
GO