零度zero

导航

利用sqlserver 直接读取excel文件

背景:有一个dbf文件,需要导入到sqlserver 数据库; 直接通过文件导入,有些行的数据不正确,串行,试过很多方法,最终放弃(猜测有特殊字符造成)。

    经过百度,找到OPENDATASOURCE 和OPENROWSET 函数直接读取本地文件的方法,经过如下:

  1.    需要启用Ad Hoc Distributed Queries

exec sp_configure 'show advanced options',1
reconfigure
exec sp_configure 'Ad Hoc Distributed Queries',1
reconfigure
使用完毕后,记得一定要要关闭它,因为这是一个安全隐患,切记执行下面的SQL语句

exec sp_configure 'Ad Hoc Distributed Queries',0
reconfigure
exec sp_configure 'show advanced options',0
reconfigure 

 

2. sqlserver的服务的登录模式要用本地账户

  

 

   3. 函数例子

    //dbf

    select  *  from openrowset('Microsoft.ACE.OLEDB.12.0','dBase IV;DATABASE=E:\客户\西工大\','select * from [rjz.dbf]')

      注意: 1. dBase IV 这个参数要跟源文件一致 2.[rjz.dbf]  :要有中括号,文件名称不能超过8个字符。3. Microsoft.ACE.OLEDB.12.0 数据接口 要在sqlserver的服务器对象的链接服务里有

   //以下是excel

   SELECT * FROM OpenDataSource( 'Microsoft.ACE.OLEDB.12.0','Data Source="D:\yhdz_jz_200724115055.xlsx";User ID=Admin;Password=;Extended properties=Excel 12.0')...[yhdz_jz_200724115055$]

   select * FROM OPENROWSET('Microsoft.ACE.OLEDB.15.0','Excel 12.0;Database=D:\yhdz_dwyhrjzqc_200724115055.xlsx;HDR=NO;IMEX=1;','SELECT * FROM [yhdz_dwyhrjzqc_200724115055$]')

注意:1. 函数的参数 : 可选HDR 代表文件是否有标题   ;可选IMEX 代表 excel文件中的混合类型(Intermixed)的列是否强制转成文本,这个参数比较重要。 

    2.我用的是sqlserver2014 ,默认安装了Microsoft.ACE.OLEDB.12.0 ,可以在SQLSERVER 的服务器对象--链接服务器--访问接口查看  ,如果没有可以从网上下载安装

  

posted on 2020-08-07 11:55  零度zero  阅读(1127)  评论(0编辑  收藏  举报