1

FORXMLクエリの結果をテキストとして取得しようとしています。私はここでいくつかの同様の質問を見つけました: SQL Server "FOR XML"の使用:結果のデータ型をText / varchar / stringに変換しますか? しかし、私の場合、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 ...

さらに、各ノードで名前空間の繰り返しを回避する方法を知っているかもしれません。

ありがとうございました

4

1 に答える 1

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 
);

アップデート:

名前空間の繰り返しを避ける

これらの2つの答えによると、でそれを行う方法がありますfor xml explicit

FOR XML PATHおよびxsi:nil属性
FOR XML PATHを使用するときに、ネストされたクエリで冗長な名前空間を削除するにはどうすればよいですか。

将来的に動作を変更したい場合は、この接続アイテムに投票できます。
ネストされたSELECTFORXMLステートメントの名前空間属性を抑制します

于 2012-04-08T08:04:58.950 に答える