【问题标题】:SQL Server FOR XML Enclosing Element?SQL Server FOR XML封闭元素?
【发布时间】:2011-07-22 08:49:24
【问题描述】:

使用 SQL Server 2008,我有一个使用 FOR XML 发出结果集的查询。现在它是一个不合规的片段。

如何将我的结果 XML 包装在一个封闭元素中,然后在顶部放置一个简单的 XML 声明,并带有单个架构/命名空间引用以使输出符合要求?

谢谢。

【问题讨论】:

    标签: xml sql-server-2008 for-xml


    【解决方案1】:

    在 SQL Server 的 XML 数据类型中不可能有 XML 处理指令。

    Limitations of the XML Data Type

    这段代码

    declare @XML xml =  
      '<?xml version="1.0"?>
       <root>Value</root>'
    
    select @XML
    

    有输出

    <root>Value</root>
    

    您可以使用适当的 XML 处理指令将 XML 构建为字符串。

    declare @XML xml = '<root>Value</root>'
    declare @XMLStr nvarchar(max) = '<?xml version="1.0"?>'
      
    set @XMLStr = @XMLStr + cast(@XML as nvarchar(max))
    
    select @XMLStr
    

    输出

    --------------------------------------------------------------------------
    <?xml version="1.0"?><root>Value</root>
    

    【讨论】:

    • 我的 C# 编码器说我通过加倍字符串使用来“浪费”内存,但如果这是最好的方法(并且 MSSQL 处理字符串 garbase 集合),我想没有问题。谢谢!
    【解决方案2】:

    在开头添加“WITH XMLNAMESPACES”,在 FOR XML 子句中添加 ROOT():

    WITH XMLNAMESPACES ( DEFAULT 'http://namespace_uri_here' )
    SELECT * 
    FROM TABLE
    FOR XML AUTO, ROOT('TopLevel')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-12
      • 1970-01-01
      • 2014-01-27
      相关资源
      最近更新 更多