sql - 对 XML 输出的 SQL 查询出错。格式类似于文本文件
问题描述
我对 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
解决方案
您的输出文件采用带有 BOM 的 UTF-16 编码。WinSCP 内部编辑器不支持 UTF-16,而 Notepad++ 支持。
如果您想使用 WinSCP 内部编辑器查看/编辑文件,请使用不同的编码导出文件。为此使用bcp
-C
开关。最好使用 UTF-8 ( 65001
),但仅从 SQL Server 2016 开始支持它。对于 2012,您将不得不求助于“ANSI/Microsoft”编码 ( ACP
),但这不是二进制安全的。请参阅bcp
文档。
queryout -C{65001} "path"
您是否知道可以将 WinSCP 配置为在 Notepad++ 中编辑文件而不是内部编辑器?
推荐阅读
- postgresql - 查询IP地址是否在表中startIP和EndIp列的范围内
- css - 如何从 max(env(safe-area-inset-bottom)) 声明 css 回退
- wordpress - 如何在 wordpress 上删除 https://sitename.com/sitename 页面?
- swift - 更改字典数组中的值 swift 5
- java - 如何修复“预期的 URL 方案 'http' 或 'https' 但未找到冒号”错误?
- javascript - 在 Bokeh DataTable 错误中引用行/列的 JS 代码
- go - 如何在函数中添加一些行可变次数?
- java - 用于 JDK8 的 Rhino javascript JSR-223-wrapper 在哪里?
- alfresco - 在 Alfresco 中找不到类 org.alfresco.web.config.WebClientConfigBootstrap
- c# - 为什么 SaveFileDialog 包含韩文字符时会更改文件名?