【问题标题】:Using SQL Server “FOR XML”: Convert Result to text使用 SQL Server “FOR XML”:将结果转换为文本
【发布时间】:2012-04-07 23:36:08
【问题描述】:

我正在尝试将 FOR XML 查询的结果作为文本获取。 我在这里发现了一些类似的问题: Using SQL Server "FOR XML": Convert Result Datatype to Text/varchar/string whatever? 但在我的情况下,我使用 WITH XMLNAMESPACES 语句,这个解决方案对我不起作用。 如何以文本形式获得以下查询的结果?

WITH XMLNAMESPACES ('urn:blablablabla' as bi) 
SELECT 'urn:blablabla.xsd' AS "@xsi:schemaLocation",  

        (SELECT 'aaaa' AS 'bi:idValue', 
                'bbbb' AS 'bi:idContext' 
        FOR XML PATH('bi:Part1'),TYPE), 

        (SELECT 'cccc' AS 'bi:idValue', 
                'dddd' AS 'bi:idContext' 
        FOR XML PATH('bi:Part2'),TYPE) 
 FOR XML PATH('bi:Items'), ELEMENTS XSINIL 

谢谢


结果应该是这样的:

<bi:Items xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bi="urn:blablablabla" xsi:schemaLocation="urn:blablabla.xsd">
<bi:Part1 xmlns:bi="urn:blablablabla">
 <bi:idValue>aaaa</bi:idValue>
 <bi:idContext>bbbb</bi:idContext>
</bi:Part1>
<bi:Part2 xmlns:bi="urn:blablablabla">
 <bi:idValue>cccc</bi:idValue>
 <bi:idContext>dddd</bi:idContext>
</bi:Part2>
</bi:Items

我的目标是将此结果作为文本而不是 XML 数据类型。 例如做这样的事情:

DECLARE @ResultText NVARCHAR(MAX) 
SET @ResultText = ... Returned text from this query ...

另外也许你知道如何避免在每个节点中重复命名空间?

谢谢

【问题讨论】:

  • 你的例子的输出应该是什么样的?

标签: sql-server


【解决方案1】:

您需要使用select 而不是set

DECLARE @ResultText NVARCHAR(MAX);

WITH XMLNAMESPACES ('urn:blablablabla' as bi) 
SELECT @ResultText = 
  (
    SELECT 'urn:blablabla.xsd' AS "@xsi:schemaLocation",  

            (SELECT 'aaaa' AS 'bi:idValue', 
                    'bbbb' AS 'bi:idContext' 
            FOR XML PATH('bi:Part1'),TYPE), 

            (SELECT 'cccc' AS 'bi:idValue', 
                    'dddd' AS 'bi:idContext' 
            FOR XML PATH('bi:Part2'),TYPE) 
     FOR XML PATH('bi:Items'), ELEMENTS XSINIL 
);

更新:

避免重复命名空间

根据这两个答案,有一种方法可以使用for xml explicit

FOR XML PATH and xsi:nil attributes
How do I remove redundant namespace in nested query when using FOR XML PATH

如果您希望将来改变行为,您可以对此连接项目进行投票。
suppress namespace attributes in nested SELECT FOR XML statements

【讨论】:

  • 不客气。如果这有效,您应该考虑使用右侧的勾号接受此答案。它将向社区显示此问题已得到解答。
  • 是的,它有效,但也许有人知道如何避免在每个节点中重复命名空间...
  • 对不起,忘了那个。我不知道该怎么做,但如果我弄明白了,我会更新我的答案。
猜你喜欢
  • 1970-01-01
  • 2011-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-28
  • 1970-01-01
  • 2012-03-28
相关资源
最近更新 更多