什么是:使用SQLCMD将数据导出到XML中的T-SQL查询中的XML ON?

时间:2014-06-21 14:47:11

标签: xml tsql bcp sqlcmd sql-server-2008

在使用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不识别代码行?

1 个答案:

答案 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.

这很可能是由于在查询编辑器的上下文中不需要此特定命令。