Sqlserver 2012 导入 DBF文件

将dbf文件放在任意系统目录下,我放在d:\db目录下

 

需安装 AccessDatabaseEngine.exe (ACE)

官网下载地址:

https://www.microsoft.com/en-us/download/details.aspx?id=13255 

 安装之后在 sqlserver 实例下 ->“链接服务器”-> “访问接口”中会看到以下接口。

 

执行以下语句:

exec sp_configure 'show advanced options',1

reconfigure
exec sp_configure 'Ad Hoc Distributed Queries',1
reconfigure


EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1

EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1 

在ssms中执行sql查询语句

select*from OPENROWSET('Microsoft.ACE.OLEDB.12.0','dBase IV;HDR=NO;IMEX=2;DATABASE=d:/db','select * from [2015.DBF]') 

这里因为环境原因可能会报ISAM错

研究了很长时间网上搜了很多资料,最终 在这里得到启发https://support.hp.com/cn-zh/document/c01208058 ,是因为缺少ISAM驱动,

于是 找到对应的msxbse35.dll 注册,注册后 需要重新启动数据库服务器才有效果。

再次执行sql 查询命令

select*from OPENROWSET('Microsoft.ACE.OLEDB.12.0','dBase IV;HDR=NO;IMEX=2;DATABASE=d:/db','select * from [2015.DBF]')

 提示如下

需安装Foxpro,并在Foxpro命令框输入以下命令 回车,将dbf文件转换格式

USE 'd:\db\2015.dbf' EXCLUSIVE;

COPY TO 'd:\db\2015new.dbf' TYPE FOX2X;

或在Foxpro里将当前dbf文件导出为 dBase IV格式:

 

 

 再次执行,这里应该选择新的dbf文件2015new.dbf,最终成功读取了dbf文件内容。速度还是比较快的,100多万的数据全表查询用了1分钟左右。

 select*from OPENROWSET('Microsoft.ACE.OLEDB.12.0','dBase IV;HDR=NO;IMEX=2;DATABASE=d:/db','select * from [2015new.DBF]')

 

步骤五:关闭系统存储过程高级选项开关

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

 知识点总结:

1.以下命令作用

 --开启数据库系统存储过程高级选项

exec sp_configure 'show advanced options',1

reconfigure

--即席分布式查询服务器配置选项,开启之后可跨数据库访问

--参阅:https://msdn.microsoft.com/zh-cn/library/ms187569.aspx

exec sp_configure 'Ad Hoc Distributed Queries',1

reconfigure

--修改ACE接入参数
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1

EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1 

 

以上内容还涉及到很多知识点,但时间原因暂没深入去逐个研究,只是点到为止。

 

posted @ 2017-06-10 22:51  Fx199  阅读(5704)  评论(0编辑  收藏  举报