从visual foxpro(dbf)导入sql server的问题。(急)

zhangqiushui 2007-03-29 03:25:14
我用下面语句导入sql server时,
/////////////////////////////////////////////
select * into [B101-2005] from openrowset('MSDASQL','Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=D:\dx\data\year','select * from [B101-2005]')
发生如下错误:
////////////////////////////////////////
服务器: 消息 7341,级别 16,状态 2,行 1
未能得到列 '[MSDASQL].b181' 的当前行的值(从 OLE DB 提供程序 'MSDASQL' 中)。由于数据值溢出了提供程序所用数据类型的取值范围,转换失败。
[OLE/DB provider returned message: 多步 OLE DB 操作产生错误。如果可能,请检查每个 OLE DB 状态值。没有工作被完成。]
OLE DB 错误跟踪[OLE/DB Provider 'MSDASQL' IRowset::GetData returned 0x80040e21: Data status returned from the provider: [COLUMN_NAME=b181 STATUS=DBSTATUS_E_DATAOVERFLOW]]。
/////////////////////////////////////////////
由于在vf中,b181该列是numeric型的,有些数据超过了6位,所以这样就产生了上述错误,我把该表中的b181大于6位的记录删除,就没有问题。难道导入时,sql server把vf中的numeric当作int来看待,怎么不把它导成sql server中的numeric,这样就不会溢出了。
现在问题是,大于6位的记录不能删除,如何才能导入?sql server中的表原始不存在的,要从vf中导入后才存在,所以修改sql server表结构是不行的。并且导入的表的数目也是不确定的。

谢谢各位!
...全文
711 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
tenkol 2007-05-28
  • 打赏
  • 举报
回复
bergn(峨嵋剑公子) 的正解
漫步晨光L 2007-05-22
  • 打赏
  • 举报
回复
我也遇到和你一样的地方。解决方法是导入时候利用vf的转换函数,另外需要写成一个函数利用ado/dao把dbf的字段结合成为一个字符串。

select LURUFCODEfrom openrowset('MSDASQL', 'Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB= D:\',
'select mton(LURUFCODE) LURUFCODE ,LURUPURDAY from C15A') as a

vf中mton可以让一个 numberic的5转换为numberic13,这样,你sql中的numberic13就足够大了。
--------------------------
ps,另外一个更稳定更强大的方法是把dbf中字段类型总结一下,然后自己写转换函数,先create table 在sql中,然后利用这个方法insert.

good luck!
zhangqiushui 2007-03-29
  • 打赏
  • 举报
回复
并且vf中数据表有哪些字段也不确定的了
zhangqiushui 2007-03-29
  • 打赏
  • 举报
回复
还有,在导入前是不知道表有哪些字段的,字段是原样从vf中导入的。
zhangqiushui 2007-03-29
  • 打赏
  • 举报
回复
谢谢楼上各位,但我是要在代码中处理了,所以直接用工具不行的了
CathySun118 2007-03-29
  • 打赏
  • 举报
回复
用DTS工具好处理些
OracleRoob 2007-03-29
  • 打赏
  • 举报
回复

在SQL中强制转换一下,如:


select 字段1,字段2, cast(字段3 as decimal(18,2) as 字段3)
into [B101-2005]

from openrowset('MSDASQL','Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=D:\dx\data\year','select * from [B101-2005]')
dawugui 2007-03-29
  • 打赏
  • 举报
回复
直接使用SQL的导入导出功能,在导入时可以更换字段类型.

34,587

社区成员

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

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