向SQL2005中导入.dbf文件中的数据

      有时我们需要从.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语句不一定都相同,所以以上代码只作为一个参考和思路,谢谢!!!

posted @ 2011-08-06 20:55  静悦  阅读(1006)  评论(0编辑  收藏  举报