BCP导出到XML,打开XML会产生错误:文档末尾的额外内容

时间:2016-11-19 07:33:33

标签: sql-server xml bcp

我正在尝试使用BCP导出为XML格式,并且XML文件生成正确,但实际内容似乎有误。有人可以帮忙吗?

当我尝试在浏览器中打开XML时,我收到以下错误消息:

  

此页面包含以下错误:第62行第1行的错误:   文档末尾的额外内容

我正在使用的SQL选择是:

DECLARE @fileName VARCHAR(50)
DECLARE @sqlStr VARCHAR(1000)
DECLARE @sqlCmd VARCHAR(1000)

SET @fileName = 'c:\fund_lib\test.xml'

USE PORT_APP_SQL

DROP TABLE ##temp;

WITH cte1
     AS (SELECT LTRIM(RTRIM(codigo))             AS code,
                CONVERT(VARCHAR(10), fecha, 120) AS date,
                precio                           AS NAV
         FROM   mpr_price_history
         WHERE  codigo IN( 'LU0038743380', 'LU0086913042', 'LU0265291665', 'LU0098860363',
                           'LU0128525689', 'LU0121204944', 'CZ0008474780', 'LU0363630376',
                           'LU0372180066', 'LU0271663857', 'LU0271663774', 'LU0363630707', 'LU0313643024' ))
SELECT *
INTO   ##temp
FROM   cte1

SET @sqlStr = 'select * from ##temp  order by code, date desc FOR XML RAW (''code'');'
-- Save XML records to a file:
SET @sqlCmd = 'bcp "' + @sqlStr + '" queryout ' + @fileName
              + ' -S "MPR01\SQLEXPRESS"  -T -w'

EXEC xp_cmdshell @sqlCmd  

如果我在Firefox中打开它,这是错误消息(抱歉是西班牙语)。

error message seems to be at the end of each line

3 个答案:

答案 0 :(得分:2)

原因是因为XML没有根路径。基于脚本的这个示例应该生成浏览器不会抱怨的XML:

DECLARE @fileName VARCHAR(50);
DECLARE @sqlStr VARCHAR(1000);
DECLARE @sqlCmd VARCHAR(1000);

SET @fileName = 'c:\temp\test.xml';

SELECT *
INTO   ##temp
FROM   (VALUES('LU0038743380',GETDATE(),1),
              ('LU0086913042',GETDATE(),2),
              ('LU0265291665',GETDATE(),3),
              ('LU0098860363',GETDATE(),4)) AS cte1(fecha,[date],nav);

SET @sqlStr = 'select (select * from ##temp FOR XML RAW(''code''),TYPE) FOR XML PATH(''data'');'

-- Save XML records to a file:
SET @sqlCmd = 'bcp "' + @sqlStr + '" queryout ' + @fileName
              + ' -S '+@@SERVERNAME+'  -T -w';

EXEC xp_cmdshell @sqlCmd;

DROP TABLE ##temp;

答案 1 :(得分:2)

我认为你的整个查询可以简化......不需要CTE或临时表......

关注您的问题的解决方案是 - 可能! - Error: unexpected '{' in "g + labs( y=expression(N_{" Execution halted 提到的缺少的根节点。如果添加根节点解决了您的问题,请不要接受我的回答(尽管您可以投票,如果您喜欢:-))。

您的问题可能会受到各种编码的影响。如果输出包含特殊字符,则混合使用8字节编码(@TT.)和输出选项VARCHAR时可能会出现问题。因此,我把这一切都放在-w

我建议让事情变得苗条:

NVARCHAR(MAX)

答案 2 :(得分:0)

我在没有错误的情况下进行了小规模的改动 似乎问题出在您的数据上 寻找特殊的XML字符。