从Excel文件中导数据到SQLServer2005中

SELECT *
from OPENROWSET('MICROSOFT.JET.OLEDB.4.0','Excel 8.0;IMEX=1;DATABASE=D:\test.xls',sheet1$) AS A

补充:这里请注意如果你的SQLServer是2008的64位必须要安装ACE64位

下载地址:http://www.microsoft.com/zh-cn/download/details.aspx?id=13255 

原因是:在64SQL Engine中已经不提供jet.oledb.4.0的驱动了

安装完成后需要把上面的 MICROSOFT.JET.OLEDB.4.0 改成 Microsoft.ACE.OLEDB.12.0

需求:

  把一个Excel文件里面的数据导入到数据库生成一个表

思路:

  利用SQLServer提供的OpenrowSet方法把Excel文件的数据导入到数据库表中

1.首先打开Ad Hoc Distributed Queries组件

EXEC sp_configure 'show advanced options', 1        --设置数据库显示高级选项
RECONFIGURE
EXEC sp_configure 'Ad Hoc Distributed Queries', 1 --开启该组件
RECONFIGURE

 

注意:如果此时出现如下错误

配置选项 'show advanced options' 已从 1 更改为 1。请运行 RECONFIGURE 语句进行安装。
消息 15123,级别 16,状态 1,过程 sp_configure,第 51
配置选项 'Ad Hoc Distributed Queries' 不存在,也可能是高级选项。
消息 5808,级别 16,状态 1,第 3
不支持对系统目录进行即席更新。  

这时有两种办法解决

第一种是先关闭 'allow updates'此选项

代码如下:

EXEC sys.sp_configure 'allow updates',1
RECONFIGURE WITH override

执行以上代码之后再执行第一步的代码就不会报错了

第二种就是直接执行如下代码:

EXEC sp_configure 'show advanced options', 1        --设置数据库显示高级选项
RECONFIGURE OVERRIDE
EXEC sp_configure 'Ad Hoc Distributed Queries', 1 --开启该组件
RECONFIGURE OVERRIDE

2.使用以下命令对Excel的工作簿进行查询或筛选

SELECT *
from OPENROWSET('MICROSOFT.JET.OLEDB.4.0','Excel 8.0;IMEX=1;DATABASE=D:\test.xls',sheet1$) AS A

简单描述下连接字符串意义

'MICROSOFT.JET.OLEDB.4.0' OLE DB 访问接口名称

Excel 8.0;      Excel版本

HDR=Yes;      代表第一行是标题,不做为数据使用 ,如果用HDR=NO,则表示第一行不是标题,做为数据来使用。系统默认的是YES

IMEX=1;       通知驱动程序以文本格式读取混合型的列(如数字、日期、字符串等)。需要注意的是,这个选项可能会导致Excel文件的写入拒绝

DATABASE=D:\test.xls 文件路径(注意:最好不要放在C盘即系统盘符下面,有时会出现连接失败的情况)

关于OpenRowSet 方法的描述可以直接看SQLServer2005的帮助

以上命令已经能查询出Excel文件的内容,之后怎么处理相信大家应该非常清楚了,呵呵!



 

posted @ 2011-09-28 17:40  随心而为  阅读(672)  评论(0)    收藏  举报