关于将.dbf数据导入Sql Server的问题

every12555 2003-10-09 02:51:48
我想将一个多个.dbf的数据导入到Sql Server中,执行如下代码

select a.*
from openrowset('Microsoft.Jet.OLEDB.4.0',
'd:\0926.dbf';'admin';'',[0926]) as a

错误提示:
OLE DB 提供程序 'Microsoft.Jet.OLEDB.4.0' 报错。
[OLE/DB provider returned message: 不可识别的数据库格式 'd:\0926.DBF'。]
OLE DB 错误跟踪[OLE/DB Provider 'Microsoft.Jet.OLEDB.4.0' IDBInitialize::Initialize returned 0x80004005: ]。

这是什么问题呀?我知道.dbf有很多个版本,但是都应该能导进去的呀?
因为这样的信息每天都要处理,且目标操作的表名都是由日期生成的。如果用DTS能做吗?如果可以帮忙给个实例,谢谢~~





...全文
132 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjcxc 元老 2003-10-09
  • 打赏
  • 举报
回复
dbf文件这样处理,只能在同一台电脑上.

你可以用xp_cmdshell调用复制命令,将数据复制到服务器上,再处理.

exec master..xp_cmdshell 'copy \\192.168.0.2\d\0926.DBF d:\0926.dbf'

select a.* from openrowset('MSDASQL',
'Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=d:\',
'select * from [0926.DBF]') as a
every12555 2003-10-09
  • 打赏
  • 举报
回复
还有一个问题,如果目标表不在服务器的本机的。如在:192.168.0.2\d:\

select a.* from openrowset('MSDASQL',
'Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=d:\',
'select * from [0926.DBF]') as a

可以读取吗?如果能应该如何做?
Wally_wu 2003-10-09
  • 打赏
  • 举报
回复
mark
zjcxc 元老 2003-10-09
  • 打赏
  • 举报
回复
如果每天都要导入的话,可以创建作业来完成.
例子:

如果每天都要导入的话,可以创建作业来完成.
例子:

--创建作业
exec sp_add_job @job_name='数据处理'

--创建作业步骤
declare @sql varchar(800) --数据导入处理的命令
set @sql='declare @sql varchar(8000)
set @sql=''select a.* from openrowset(''''MSDASQL'''',
''''Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=d:\'''',
''''select * from [''+right(convert(varchar(6),getdate(),112),4)+'']'''') as a''
exec(@sql)
'
print @sql

exec sp_add_jobstep @job_name='数据处理',
@step_name = '数据同步',
@subsystem = 'TSQL',
@database_name='pubs',
@command = @sql
@retry_attempts = 5, --重试次数
@retry_interval = 5 --重试间隔

--创建调度
EXEC sp_add_jobschedule @job_name = '数据处理',
@name = '时间安排',
@freq_type = 4, --每天
@freq_interval = 1, --每天执行一次
@active_start_time = 17000 --17:00:00执行


zjcxc 元老 2003-10-09
  • 打赏
  • 举报
回复
你是导入foxpro数据库吧,用:

select a.* from openrowset('MSDASQL',
'Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=d:\',
'select * from [0926.DBF]') as a
愉快的登山者 2003-10-09
  • 打赏
  • 举报
回复
SELECT * FROM
OPENROWSET('MSDASQL','Driver=Microsoft Visual FoxPro Driver; SourceDB=c:\gz; SourceType=DBF','select * from ut_persondata')

SELECT * FROM OpenDataSource('Microsoft.Jet.OLEDB.4.0','Data Source="C:\gz";User ID=admin;Password=;
Extended properties=dBase 5.0')...ut_persondata



txlicenhe 2003-10-09
  • 打赏
  • 举报
回复

--/* dBase IV文件
select * from
OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
,'dBase IV;HDR=NO;IMEX=2;DATABASE=C:\','select * from [客户资料4.dbf]')
--*/

--/* dBase III文件
select * from
OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
,'dBase III;HDR=NO;IMEX=2;DATABASE=C:\','select * from [客户资料3.dbf]')
--*/

--/* FoxPro 数据库
select * from openrowset('MSDASQL',
'Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:\',
'select * from [aa.DBF]')
--*/

/**************导入DBF文件****************/
select * from openrowset('MSDASQL',
'Driver=Microsoft Visual FoxPro Driver;
SourceDB=e:\VFP98\data;
SourceType=DBF',
'select * from customer where country != "USA" order by country')
伍子V5 2003-10-09
  • 打赏
  • 举报
回复
你是转成dbase还是foxpro的数据格式,根据你的数据格式选择下面的方法:

--/* dBase IV文件
select * from
OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
,'dBase IV;HDR=NO;IMEX=2;DATABASE=C:\','select * from [客户资料4.dbf]')
--*/

--/* dBase III文件
select * from
OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
,'dBase III;HDR=NO;IMEX=2;DATABASE=C:\','select * from [客户资料3.dbf]')
--*/

--/* FoxPro 数据库
select * from openrowset('MSDASQL',
'Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:\',
'select * from [aa.DBF]')
--*/

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧