【问题标题】:SQL query to XML output goes something wrong. the format is like text file对 XML 输出的 SQL 查询出错。格式类似于文本文件
【发布时间】:2021-01-05 21:46:42
【问题描述】:

我对 SQL 查询的 XML 输出有一个非常有趣的问题。

DECLARE @DateStr VARCHAR(30), @sql nvarchar (4000)
SET @DateStr = REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR(30), dateadd(HH,+2,getdate()),120),'.','-'),':','-'),' ','_');
SET @sql ='bcp "SELECT top 1  [Kod] ,[Ad] FROM [SMFT].[dbo].[AlanKonya]  FOR XML PATH(''Cubik'') ,ROOT(''CubicDetails'')" queryout "\\\cgtserver\Development\Cubik_FIFOREPORT_' + @DateStr + '.xml" -T -S CGTSAPP\CGTSSQL120 -w -r -t'
EXEC xp_cmdshell @sql

输出文件看起来像这样。[notepad++]

当我用 WinSCP 编辑器查看时,它看起来像这样 [WinSCP]

文件格式看起来像文本格式

我只想看到这样的[notepad++ ok]

当我打开的其他 XML 文件看起来是格式化的时,为什么我的 XML 输出看起来像一个文本文件?

我在使用 WinScp 传输文件时遇到问题,因为它显示为文本文件

我使用的是 SQL 2012 标准版。我在 SQL 2016 企业版中尝试过,但结果相同

你能帮帮我吗?

最好的问候

这是我的新问题

DECLARE @FilePath VARCHAR(4000)DECLARE @SQLStr NVARCHAR(4000),
    @Cmd NVARCHAR(4000),
    @Ret INT,
    @DateStr VARCHAR(30), @sql nvarchar (4000)
SET @DateStr = REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR(30), dateadd(HH,+2,getdate()),120),'.','-'),':','-'),' ','_');
SELECT @SQLStr = 'SELECT N''<?xml version=''''1.0'''' encoding=''''UTF-8''''?>'' + (SELECT CAST((SELECT * FROM [SMFT].[dbo].Cubik_FIFOREPORT FOR XML  PATH(''Cubik'') ,ROOT(''CubicFifoReport''), ELEMENTS XSINIL) AS NVARCHAR(MAX)))'
SELECT @SQLStr AS SQLStr
SELECT @FilePath ='\\cgtserver\DEVELOPMENT\Cubik_FIFOREPORT_' + @DateStr + '.xml'
SELECT @Cmd = ' bcp " ' + @SQLStr + '" queryout '+@FilePath+'  -c -r  "" -T -S ' +@@ServerName
EXEC @Ret = master.dbo.xp_cmdshell @Cmd 

【问题讨论】:

    标签: sql export helper export-to-xml


    【解决方案1】:

    您的输出文件采用带有 BOM 的 UTF-16 编码。 WinSCP 内部编辑器不支持 UTF-16,而 Notepad++ 支持。

    如果您想使用 WinSCP 内部编辑器查看/编辑文件,请使用不同的编码导出文件。使用 bcp -C 开关。最好的方法是使用 UTF-8 (65001),但它仅从 SQL Server 2016 开始受支持。对于 2012,您将不得不求助于“ANSI/Microsoft”编码 (ACP),但这不是二进制安全的。见bcp documentation

    queryout -C{65001} "path"
    

    您知道您可以configure WinSCP to edit files in Notepad++ 代替内部编辑器吗?

    【讨论】:

    • 是的,我了解情况。我写了一个新的查询。我使用 cast 函数将 XML 输出转换为 varchar。它似乎有效但是,我还有另一个问题。当我执行此查询时,输出文件大小正在增加并在文件末尾添加空格您能帮我解决这个问题吗?我在主要问题的末尾添加了我的新查询
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多