2

TSQL クエリがあるとします。

1 as 'Category1/@Level',
2 as 'Category2/@Level',
t.MainCat as 'Category1', 
t.SubCat as 'Category2'
FOR XML PATH (''), ROOT('Taxonomy')

次の結果が生成されます。

<Taxonomy>
      <Category1 Level="1">Clothing</Category1>
      <Category2 Level="2">Jeans</Category2>
</Taxonomy>

要素 Category1 と Category2 には、SQL クエリを生成して xml 形式に変換するための一意の名前があります。そのため、Category1 と Category2 を使用しました。最終結果を次のようにしたいと思います。

<Taxonomy>
      <Category Level="1">Clothing</Category>
      <Category Level="2">Jeans</Category>
</Taxonomy>

これはhere のようにXML EXPLICIT を使用して実行できますが、私のコードははるかに大きいため、非常に雑然として複雑になります。

xml.modify を使用すると、値または属性を変更できますが、要素自体は変更できません。

最初のクエリ結果を @X1 xml 変数に格納してから、要素 Category1 & Category2 を Category に変更して変数 @X2 に入れる方法はありますか? テキストファイルで使用される検索と置換のようなものですが、クエリ中に使用されます。

4

2 に答える 2

2

要素間にヌルをこっそり入れるとうまくいく:

Select
1 as 'Category/@Level',
t.MainCat as "Category",
null,
2 as 'Category/@Level',
t.SubCat as "Category"
FOR XML PATH (''), ROOT('Taxonomy')
于 2014-07-30T17:39:47.217 に答える
1

また、ネストを使用することもできます:

select
    (select 1 as '@Level', 'Clothing'
        for xml path('Category'), type),
    (select 2 as '@Level', 'Jeans'
        for xml path('Category'), type)
for xml path('Taxonomy');

または、values出力 xml を形成する前にカテゴリのリストを作成する句:

select Cat.Level as '@Level', Cat.Value as 'text()'
from (values
        (1, 'Clothing')
        ,(2, 'Jeans')
    ) Cat(Level, Value)
for xml path('Category'), root('Taxonomy');
于 2014-07-30T18:17:26.060 に答える