BCP导入XML不成功,能成功导入的XML在IE打开是空白页

z1612074967 2016-05-12 11:07:40
我使用SQL Server数据库,在命令行用bcp在数据库导出xml文件,更改后再导入数据库。
xml在IE打开:
命令行反应:
多次试验,大部分是“SQLState= S1000,NativeError=0,在BCP数据文件中遇到意外的EOF”,少数情况会显示“SQLState= 22005,NativeError=0,对于造型说明无效的字符值”
有一次成功了,但是这个成功的xml文件结构很诡异,用记事本编辑打开是这样子的(导出的是数据库另一个表格):
IE打开是空白页,360打开显示“error on line 1 at column 1: Document is empty”。

这几次导出用的命令:bcp 数据库名.dbo.表名 out H:\sss.xml -c -t -T -S localhost这种的
导入:bcp 数据库名.dbo.表名 in H:\sss.xml -c -t -T -S localhost 这种的
想不明白原因。到底怎么样才能成功地将BCP导出的xml文件里的数据再导入数据库呢,求指点!
...全文
265 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
z1612074967 2016-05-13
  • 打赏
  • 举报
回复
用10楼的方法问题解决了! 非常感谢版主和KanzakiOrange的回复,了解了很多自己之前不知道的东西,CSDN真棒! 我会继续努力!
中国风 2016-05-12
  • 打赏
  • 举报
回复
直接解析导入到数据库 或用bulk insert--指定格式导入XML
z1612074967 2016-05-12
  • 打赏
  • 举报
回复
我把导出语句换成了bcp "for xml语句" queryout "路径" -c -t -T -S localhost,生成了打开正常的xml文件。估计以前生成的是txt,只是扩展名为xml。但是导入时还是“对于造型说明无效的字符值”,我确定数据库中没有冲突数据
中国风 2016-05-12
  • 打赏
  • 举报
回复
如表时用xml栏位时可用格式化导入 你可这样用

--导出
EXEC master.dbo.xp_cmdshell 'bcp "SELECT * FROM SampleDB.dbo.Tab1 FOR XML PATH(''MeasureSyParas''),ROOT(''MeasureSyParas'')" queryout D:\Tab.xml -c  -T -S localhost'


--导入

INSERT INTO dbo.Tab1
        ( ID, Name )
SELECT 
	ID=T2.C.value('(ID/text())[1]','int'),
	NAME=T2.C.value('(Name/text())[1]','nvarchar(50)')
FROM (SELECT CONVERT(xml, BulkColumn, 2)  FROM  OPENROWSET(Bulk 'D:\Tab.xml', SINGLE_BLOB) AS T) AS T(C)
CROSS APPLY T.C.nodes('MeasureSyParas/MeasureSyParas') AS T2(C)
中国风 2016-05-12
  • 打赏
  • 举报
回复
把解析后的结果存储在对应的表和列
z1612074967 2016-05-12
  • 打赏
  • 举报
回复
引用 8 楼 KanzakiOrange 的回复:
那如果你要导出成那样的格式,用
bcp "select * from 数据库名.dbo.表名 for xml path(''),root('表名'),type" queryout H:\sss.xml -c -t -T -S localhost
试下

我用bcp "select * from MySubject.dbo.MeasureSysParas where SystemName = 'iSystem' for xml raw('MeasureSysParas'),elements,root('MeasureSysParas')" queryout "D:\Tab1.xml" -c -t -T -S localhost导出文件D:\Tab1.xml(打开是xml形式),

用版主的方法EXEC master.dbo.xp_cmdshell 'bcp MySubject.dbo.MeasureSysParas in D:\Tab1.xml -N -f "D:\Tab-c.xml" -T -S localhost',或者用BULK INSERT MySubject.dbo.MeasureSysParas FROM 'D:\Tab1.xml' WITH ( formatfile = 'D:\Tab-c.xml' ),或者不用格式文件,都显示有“意外的文件结尾”。但是我不知道为什么会有意外的文件结尾
Ginnnnnnnn 2016-05-12
  • 打赏
  • 举报
回复
那如果你要导出成那样的格式,用 bcp "select * from 数据库名.dbo.表名 for xml path(''),root('表名'),type" queryout H:\sss.xml -c -t -T -S localhost 试下
z1612074967 2016-05-12
  • 打赏
  • 举报
回复
引用 5 楼 KanzakiOrange 的回复:
按照版主的方法能解决你的问题 如果要生成非xml格式化文件,把-x 去掉。要自定义列分隔符和行分割符 使用 -t 和 -r
您好,我使用版主3楼的方法生成了xml的格式文件,但是导出的文件用txt打开看不到xml应有的格式,IE也是空白页,图如#6,这是为什么呢
z1612074967 2016-05-12
  • 打赏
  • 举报
回复
引用 4 楼 roy_88 的回复:
BCP导入方法参照#3,指定分隔符为","逗号

您好,用您的方法可以成功导入导出,但是导出的文件是这样的
IE打开空白,360打开显示error on line 1 at column 1: Document is empty.
我想要问题里第一个图那样的xml文件导入导出,该怎么办呢
Ginnnnnnnn 2016-05-12
  • 打赏
  • 举报
回复
按照版主的方法能解决你的问题 如果要生成非xml格式化文件,把-x 去掉。要自定义列分隔符和行分割符 使用 -t 和 -r
中国风 2016-05-12
  • 打赏
  • 举报
回复
BCP导入方法参照#3,指定分隔符为","逗号
中国风 2016-05-12
  • 打赏
  • 举报
回复
--创建格式 
EXEC master.dbo.xp_cmdshell 'bcp SampleDB.dbo.Tab1 format nul -c -x -f "D:\Tab-c.xml" -t, -T'
--导出时指定格式
EXEC master.dbo.xp_cmdshell 'bcp SampleDB.dbo.Tab1 out D:\Tab.xml -N -f "D:\Tab-c.xml" -T -S localhost'
--导入时指定格式
EXEC master.dbo.xp_cmdshell 'bcp SampleDB.dbo.Tab1 in D:\Tab.xml -N -f "D:\Tab-c.xml" -T -S localhost'

SELECT * FROM dbo.Tab1
/*
ID	Name
1	Roy
1	Roy		--新导入
*/

22,206

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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