如何解决对 XML 输出的 SQL 查询出错格式就像文本文件
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
当我用 WinSCP 编辑器查看时,它看起来像这样 [WinSCP]
文件格式看起来像文本格式
我只是想看看这个 [notepad++ ok ]
当我打开的其他 XML 文件看起来是格式化的时,为什么我的 XML 输出看起来像一个文本文件?
我使用的是 sql 2012 标准版。我在 sql 2016 Enterprise 中尝试过,但结果相同
你能帮我吗?
最好的问候
这是我的新任务
DECLARE @FilePath VARCHAR(4000)DECLARE @sqlStr NVARCHAR(4000),@Cmd NVARCHAR(4000),@Ret INT,@DateStr VARCHAR(30),'_');
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
解决方法
您的输出文件采用带有 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++ 代替内部编辑器?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。