有时我们需要从.dbf文件中将数据导入到SQL2005中,当然这个可能出于各种原因,比如说:原来项目是用的.dbf的数据库,而现在新的项目里使用的是SQL2005的数据库,但原来的数据又不能丢,这时就需要这类的操作。其实这样的操作是经常的,比如:SQL2005到ORACLE中,或是从ORACLE到SQL2005/2008;最近遇到了这样的问题,在网上寻找了很久,终于得到了一个解决的方法,在此记录一下。
在SQL2005中,若要读取.dbf的文件的数据,就得启用SQL2005的高级组件,叫:Ad Hoc Distributed Queries,若没有启用就会出现以下的错误提示信息:
所以需要启动它,代码如下:
---启用Ad Hoc Distributed Queries:
exec sp_configure 'show advanced options',1
reconfigure
exec sp_configure 'Ad Hoc Distributed Queries',1
reconfigure
启动了Ad Hoc Distributed Queries,就可以读取.dbf文件中的数据了,读取的代码如下:
select*from
openrowset('MICROSOFT.JET.OLEDB.4.0'
,'dBase 5.0;DATABASE=c:/code/','select * from [TD_MZDM.DBF]')
结果如下:
我们已经读取到了dbf文件中的数据,那么要将它存放在一张表中就很明显了,使用以下代码可以将其数据与表结构导入到SQL2005中:
select*into #td_mzdm from
openrowset('MICROSOFT.JET.OLEDB.4.0'
,'dBase 5.0;DATABASE=c:/code/','select * from [TD_MZDM.DBF]')
---查询临时表
select*from #td_mzdm
结果与上面是一样的,这里就不截图了
若是你的SQL2005中已经有一张表结构与dbf文件中表结构相似(就是可以把数据导入的表),那么也可以使用以下的语句完成数据的导入:
insertinto #td_mzdm
select*from
openrowset('MICROSOFT.JET.OLEDB.4.0'
,'dBase 5.0;DATABASE=c:/code/','select * from [TD_MZDM.DBF]')
当然我们也可以向dbf文件中插入数据,其方式差不多,代码如下:
insertintoopenrowset('MICROSOFT.JET.OLEDB.4.0',
'dBase 5.0;DATABASE=c:/code/',
'select * from [TD_BYLB.DBF]')
select*from dbo.td_bylbdm
结果得到受影响的行数:
导入完数后,我们需要关闭那个高级选项Ad Hoc Distributed Queries,代码如下:
---关闭Ad Hoc Distributed Queries:
exec sp_configure 'Ad Hoc Distributed Queries',0
reconfigure
exec sp_configure 'show advanced options',0
reconfigure
最后要说明的一点是:不同的版本的dbf文件所对应的SQL语句不一定都相同,所以以上代码只作为一个参考和思路,谢谢!!!