利用sqlserver 直接读取excel文件
背景:有一个dbf文件,需要导入到sqlserver 数据库; 直接通过文件导入,有些行的数据不正确,串行,试过很多方法,最终放弃(猜测有特殊字符造成)。
经过百度,找到OPENDATASOURCE 和OPENROWSET 函数直接读取本地文件的方法,经过如下:
- 需要启用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 的服务器对象--链接服务器--访问接口查看 ,如果没有可以从网上下载安装