电脑爱好者,提供IT资讯信息及各类编程知识文章介绍,欢迎大家来本站学习电脑知识。 最近更新 | 联系我们 RSS订阅本站最新文章
电脑爱好者
站内搜索: 
当前位置:首页>> SQLServer>>sqlserver 中用bcp导入数据遇到“在BCP数据文件中遇到的意外的EOF”错误:

sqlserver 中用bcp导入数据遇到“在BCP数据文件中遇到的意外的EOF”错误

来源:网络 | 2007-3-7 | (有6032人读过)


将A地的符合条件的文件恢复到B地机器上。对方管理员什么也不懂,所以想做的尽量傻瓜,免得要跟他说明半天如何操作。

--用查询语句导出文本文件
--EXEC master..xp_cmdshell 'bcp "select * from [TestDB11-27]..restoreweihai" queryout c:\test.txt -F 2 -c -S "192.168.102.122" -U"sa" -P"pass"'

--导出查询数据到XML文件
--EXEC master..xp_cmdshell 'bcp "select * from [TestDB11-27]..tline_tw for xml raw,binary

base64" queryout c:\\aa.xml -c -S"192.168.102.122" -U"sa" -P"pass"'

  --从文本文件导入数据到数据库
--EXEC master..xp_cmdshell 'bcp Customer..order in c:\test.txt -c -S "192.168.102.122" -U sa

-P pass'

这里有几点需要注意
1 写查询语句导出时,用queryout比较好,我用out 时怎么也不成功,改queryout才行。
2 库名带空格,- 等字符时用“[ ]”括起来,这个在线帮助中有。
3 导入时使用的文件必须与导出时生成的文件一致,否则会出现复制失败,接受的导入默认是制表符分隔的文件,而DTS生成的文件用了很多引号或者括号之类的来分隔字段,所以DTS导出的文本与BCP导出的文本不能通用,否则会出现“在BCP数据文件中遇到的意外的EOF”错误。

如下:

NULL
开始复制...
SQLState = S1000, NativeError = 0
Error = [Microsoft][ODBC SQL Server Driver]在 BCP 数据文件中遇到的意外的 EOF
NULL
已复制了 0 行。
数据包的大小(字节): 4096
时钟时间(毫秒): 共      1
NULL


将导入文本改成使用导出语句生成的文本后,终于成功。

4. 在别的机器上测试发现一个问题,如果B地数据库结构与A地表结构不一致,会出现“字符造型错误”的问题。
——————————————
导入B地机器前先要将B地以前的相关数据清空,否则会出现关键字冲突,这时有外键约束关系的也要注意处理,否则会出错。
清理B地表中的数据。
osql -U"sa" -P"pass"   -S"127.0.0.1" -Q "use Customer delete from order where FieldName='****' "
然后再执行导入语句。
bcp Customer..order in c:\test.txt -c -S "192.168.102.122" -U sa -P pass

将这两个语句写成bat文件。再把A地导出的test.txt文件与之放在一个文件夹,点击bat文件就可以执行了。

注意,有的机器上会找不到osql和bcp工具,可能是有的机器环境变量未设置。还得把这两个工具也加上,bcp要使用还得加上Resource Dll,这个我就懒得去找了,应该在sqlserver目录的80\tools\binn目录下

SQLServer热门文章排行
网站赞助商
购买此位置

 

关于我们 | 网站地图 | 文档一览 | 友情链接| 联系我们

Copyright © 2003-2024 电脑爱好者 版权所有 备案号:鲁ICP备09059398号