使用SQL操作excel表格數據

OpenRowSet('Microsoft.Jet.OLEDB.4.0', 'Excel 5.0; HDR=Yes; Database=F:book1.xls', sheet1$)相當於數據庫的一張表,可以從中讀取數據

下面詳述OpenRowSet的用法(摘自Transact-SQL 參考):

 

語法

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 對象及其強制接口,那麼在遠程服務器上就支持直接傳遞查詢。

註釋

如果 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 的遠程服務器上。從 datasourceuser_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
B. 將 OPENROWSET 與對象及用於 ODBC 的 OLE DB 提供程序一起使用

下面的示例使用用於 ODBC 的 OLE DB 提供程序以及 SQL Server ODBC 驅動程序訪問 pubs 數據庫中的 authors 表,該數據庫在一個名爲 seattle1 的遠程服務器中。提供程序用在 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
C. 使用用於 Jet 的 Microsoft OLE DB 提供程序

下面的示例通過用於 Jet 的 Microsoft OLE DB 提供程序訪問 Microsoft Access Northwind 數據庫中的 orders 表。

 

說明  下面的示例假定已經安裝了 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
D. 使用 OPENROWSET 和 INNER JOIN 中的另一個表

下面的示例從本地 SQL Server Northwind 數據庫的 customers 表中,以及存儲在相同計算機上 Access Northwind 數據庫的 orders 表中選擇所有數據

 

說明  下面的示例假定已經安裝了 Access。

 

USE pubs
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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章