1

SQL Server 2008R2 のテーブルに XML 列があります。XML は次のようになります (簡略化された例)。

<root>
   ...
   <Filters>
       <Filter type="a">
          <Patterns>
              <Pattern>bla bla bla</Pattern>
              <Pattern>kuku</Pattern>
          </Patterns>
       </Filter>
       <Filter type="b">
           <Name>Cookie</Name>
       </Filter>
       <Filter type="c">
          <FileTypes>
              <FileType>exe</FileType>
              <FileType>jpg</FileType>
          </FileTypes>
       </Filter>
   </Filters>
   ...
</root>

つまり、多数のフィルタ タイプが定義され、すべてのタイプに固有の子要素が存在する可能性があります。次の文字列を返すクエリを書きたいと思います。

Filter Type: a
Configuration:
    <Patterns>
        <Pattern>bla bla bla</Pattern>
        <Pattern>kuku</Pattern>
    </Patterns>

Filter Type: b
Configuration:
    <Name>Cookie</Name>

Filter Type: c
Configuration:
    <FileTypes>
        <FileType>exe</FileType>
        <FileType>jpg</FileType>
    </FileTypes>

私がこれまでに持っているものは次のとおりです。

SELECT
   xmlFiled.query(
     let $nl := "&#10;"
     let $space := "&#32;"
     let $tab := concat($space, $space, $space, $space)
     for $f in /root/.../Filters/Filter 
     return concat("Filter Type: ", $f/@type, $nl, "Configuration:", $nl, $tab, $f/node()[1], $nl)'
     ) AS Filters, 
FROM Table

問題は、$f/node()[1] の文字列変換が、XML タグを保持せずにノードのすべての内部要素のテキストを連結することです。したがって、得られる結果は次のようになります。

Filter Type: a
Configuration:
    bla bla blakuku

Filter Type: b
Configuration:
    Cookie

Filter Type: c
Configuration:
    exejpg

この方法で私が望むものを達成することは可能ですか?

4

1 に答える 1