在使用BCP或SQLCMD的TSQL blog post about exporting data to XML上,我遇到了这行代码:
:XML ON
SELECT
*
FROM
dbo02.ExcelTest
FOR XML AUTO, ELEMENTS, ROOT('doc')
我尝试在sql查询中使用它,然后在批处理文件中通过sqlcmd触发,它确实返回了正确的xml文件。如果没有:XML ON
,它会返回网页上描述的奇怪值。
奇怪的是,SSMS(2008)在解析或执行查询时显示错误的语法。
:XML ON
做了什么以及如何使用它?为什么SSMS不识别代码行?
答案 0 :(得分:4)
在此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 ON命令 尚未在输出XML的Transact-SQL语句之前发出 流被执行,输出将出现乱码。如果是XML ON命令 已发布,您无法执行Transact-SQL语句 输出常规行集。
注意
:XML 命令不支持SET STATISTICS XML 言。
在SSMS中,即使启用“SQLCMD模式”(在“查询”菜单中),尝试使用:XML
命令时也会出现以下错误:
Scripting warning.
Command Xml is not supported. String was not processed.
这很可能是由于在查询编辑器的上下文中不需要此特定命令。