很多时候我们都知道使用.net代码去读取word,excel文档,但是我们如何使用sql句语里读取excel文件呢:SQL2005为我们提供了OPENROWSET来访问各种数据源:,当然我还是建议使用.net代码来读取这些文件。这里就不多说了。
我们先看一下官方的解释:
包含访问 OLE DB 数据源中的远程数据所需的全部连接信息。当访问链接服务器中的表时,这种方法是一种替代方法,并且是一种使用 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' } | BULK 'data_file' , { FORMATFILE = 'format_file_path' [ <bulk_options> ] | SINGLE_BLOB | SINGLE_CLOB | SINGLE_NCLOB } } ) <bulk_options> ::= [ , CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | 'code_page' } ] [ , ERRORFILE = 'file_name' ] [ , FIRSTROW = first_row ] [ , LASTROW = last_row ] [ , MAXERRORS = maximum_errors ] [ , ROWS_PER_BATCH = rows_per_batch ]
下面我们以一个例子来说明使用方法:
首先我们建立一个名为11.xls 的excel文档,文档的内容如下:
下面我们使用sql 语句来读取11.xls
select *
from openrowset
('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0; Database=C:\Users\111\Desktop\11.xls',
'select * from [Sheet1$]')
Database就是11.xls文件的路径。Sheet1是你excel表里的名字.
查询结果如下:
Name Age Title
John 25 Chair Man
Wendy 24 CEO
注意在使用这个sql语句的过程中,我们可能会碰到下面的错误
SQL Server blocked access to STATEMENT 'OpenRowset/OpenDatasource' of component 'Ad Hoc Distributed Queries' because this component is turned off as part of the security configuration for this server. A system administrator can enable the use of 'Ad Hoc Distributed Queries' by using sp_configure. For more information about enabling 'Ad Hoc Distributed Queries', see "Surface Area Configuration" in SQL Server Books Online
大概意思就是sqlserver 阻止了使用'OpenRowset/OpenDatasource'的组件,所以解决办法如下:
我们使用sql语句来开启这个功能
EXEC sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
EXEC sp_configure 'Ad Hoc Distributed Queries', 1;
GO
RECONFIGURE;
GO
当然我们也可以使用SQL server的外围工具来配置如下图:
在Enamble OpenRowSet and OPENDTASOUCE SUPOORT 前面打上勾就ok了.