J3F*_*FFK 4 xml t-sql bcp sqlcmd sql-server-2008
在这篇关于使用 BCP 或 SQLCMD 通过 TSQL 将数据导出到 XML 的博客文章中,我遇到了这行代码:
:XML ON
SELECT
*
FROM
dbo02.ExcelTest
FOR XML AUTO, ELEMENTS, ROOT('doc')
Run Code Online (Sandbox Code Playgroud)
我尝试在 sql 查询中使用它,然后通过批处理文件中的 sqlcmd 触发,它确实返回了正确的 xml 文件。如果没有它,:XML ON它会返回网页上所述的奇怪值。
奇怪的是,SSMS (2008) 在解析或执行查询时显示错误的语法。
有什么:XML ON作用以及如何使用它?为什么 SSMS 无法识别该代码行?
此 MSDN 页面对此进行了解释(搜索“:XML”):sqlcmd Utility
该页面指出:
作为 FOR XML 子句结果的 XML 输出以连续流的形式输出(未格式化)。
当您期望 XML 输出时,请使用以下命令::XML ON。
注意
sqlcmd以常用格式返回错误消息。请注意,错误消息也会以 XML 格式输出到 XML 文本流中。通过使用:XML ON,sqlcmd不会显示信息性消息。要关闭 XML 模式,请使用以下命令::XML OFF。
GO 命令不应在发出 XML OFF 命令之前出现,因为 XML OFF 命令将sqlcmd切换回面向行的输出。
XML(流式)数据和行集数据不能混合。如果在执行输出 XML 流的 Transact-SQL 语句之前未发出 XML ON 命令,则输出将出现乱码。如果已发出 XML ON 命令,则无法执行输出常规行集的 Transact-SQL 语句。
注意
: XML命令不支持 SET STATISTICS XML 语句。
在 SSMS 中,即使启用“SQLCMD 模式”(在“查询”菜单中),尝试使用该:XML命令时也会出现以下错误:
Scripting warning.
Command Xml is not supported. String was not processed.
Run Code Online (Sandbox Code Playgroud)
这很可能是由于查询编辑器上下文中不需要此特定命令。