Sql server 使用SQL Server“FOR XML”:将结果转换为文本

Sql server 使用SQL Server“FOR XML”:将结果转换为文本,sql-server,Sql Server,我正在尝试以文本形式获取FOR XML查询的结果。 我在这里发现了一些类似的问题: 但在我的例子中,我使用WITH XMLNAMESPACES语句,而这个解决方案不适合我。 如何以文本形式获得以下查询的结果 WITH XMLNAMESPACES ('urn:blablablabla' as bi) SELECT 'urn:blablabla.xsd' AS "@xsi:schemaLocation", (SELECT 'aaaa' AS 'bi:idValue',

我正在尝试以文本形式获取FOR XML查询的结果。 我在这里发现了一些类似的问题: 但在我的例子中,我使用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
此外,您可能知道如何避免在每个节点中重复名称空间

谢谢

您需要使用选择而不是设置

更新:

避免重复使用名称空间

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

如果您希望将来改变行为,您可以对此连接项目进行投票。

您需要使用select而不是set

更新:

避免重复使用名称空间

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

如果您希望将来改变行为,您可以对此连接项目进行投票。

您的示例的输出应该是什么样的?您的示例的输出应该是什么样的?欢迎您。如果这种方法有效,你应该考虑用右边的刻度标记来接受这个答案。它将向社区表明这个问题已经得到了回答。是的,它是有效的,但也许有人知道如何避免在每个节点中重复名称空间…抱歉,忘记了那个。我不知道怎么做,但如果我弄明白了,我会更新我的答案。不客气。如果这种方法有效,你应该考虑用右边的刻度标记来接受这个答案。它将向社区表明这个问题已经得到了回答。是的,它是有效的,但也许有人知道如何避免在每个节点中重复名称空间…抱歉,忘记了那个。我不知道怎么做,但如果我弄明白了,我会更新我的答案。
DECLARE @ResultText NVARCHAR(MAX) 
SET @ResultText = ... Returned text from this query ...
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 
);