【问题标题】:Name XML result column of TSQL "for xml explicit"?将 SQL 的 XML 结果列命名为“用于 xml 显式”?
【发布时间】:2009-10-14 14:14:35
【问题描述】:

我有一个使用for xml explit 返回 XML 结果的查询。

选择... 从 ... 按 [BatchType!1!TypeName]、[FormType!2!TypeName]、标签、父级排序 对于 xml 显式,root('ClientImages')

但是生成的列名的名称就像是神秘的一样

有没有办法更改列名?


[回答] 我有几个嵌套的 WITH 语句,所以我保存了查询结果,而不将 FOR XML EXPLICIT 应用到临时表 @xmlTable 中,然后将 XML EXPLICIT 结果设置为 XML,然后返回它。

declare @xmlResult xml
set @xmlResult =(   
    select  * 
    from    @xmlTable
    for xml explicit, root('ClientImages'))

select  @xmlResult as XmlResult

【问题讨论】:

  • 您使用的是什么版本的 SQL Server?在 2005 年及以后,绝对不再需要“FOR XML EXPLICIT”——FOR XML PATH 更容易使用并且更好
  • @marc_s:我有复杂的结构,我无法使用 FOR XML PATH 来表示。

标签: sql sql-server xml tsql


【解决方案1】:

-- 添加一个 select (first) 和 type (on the end), and as [something]

选择 ( 选择 1 作为标签, null 作为父母, 'algo' 作为 [nodo!1!attr] 对于 xml 显式,键入 ) 作为 [MyDesiredName]

【讨论】:

    【解决方案2】:

    不,据我所知没有。 SQL Server Management Studio 将为您的 XML 自动生成这样的名称。

    您可以先将输出分配给 XML 变量,然后选择该变量以获得“好”的列名:

    DECLARE @XmlResult XML
    
    SELECT @XmlResult = ......
      FROM .......
    
    
    SELECT @XmlResult
    

    但除此之外,我不知道有任何方法可以影响 SSMS 生成的列的名称。

    马克

    【讨论】:

    • 我没有重构 WITH 语句,而是将结果(不应用 FOR XML EXPLIT)放入临时表中,然后简单地将其作为 XML 从临时表中返回 - 答案已更新。
    【解决方案3】:

    如果您在返回的 xml 中需要命名空间:

    WITH XMLNAMESPACES ('urn:http://YourNamespaceHere' as NS0)
    SELECT  ( ... ) AS XmlResult
    

    您也可以在子选择中使用 NS0 命名空间前缀。

    【讨论】:

      猜你喜欢
      • 2018-07-12
      • 2016-11-25
      • 1970-01-01
      • 2015-01-25
      • 2013-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多