複数のテーブルから複雑な XML 結果を作成する SQL クエリまたはプロシージャを作成しようとしています。これは SQL Server 2008 R2 にあります。
だから私が返したいXMLは次の行に沿っています
<requests>
<request>
<field one/>
<field two/>
<person>
<personinfo/>
<roleinfo/>
<addrinfo/>
<!-- don't want <item> elements here -->
</person>
<person>
<personinfo/>
<roleinfo/>
<addrinfo/>
<!-- don't want <item> elements here -->
</person>
<item><iteminfo/></item> <- i want <item> elements to show up here
<item><iteminfo/></item>
<item><iteminfo/></item>
</request>
<request>
...
</request>
<requests>
行なしで動作させることはできますが、行を最終結果に<item/>
結合しようとすると、要素ではなく要素に結合されます。これはおそらく結合の理解または使用に問題がありますが、この時点で水を踏んでいます。<item/>
<person/>
<request/>
要素なしで XML を作成する SQL は<item/>
、次のようになります。
select actor-fields, person-fields, role-fields, address-fields
into #tempperson from actor
left join person on actor.personid = person.personid
left join address on address.personid = person.personid
left join role on role.personid = person.personid
order by personid
select request-fields
into #tempreq from request
order by requestid
select *
from #tempreq as request
left join #tempperson as person on person.requestid = request.requestid
order by request.requestid
for xml auto, root('requests'), elements;
必要なのは、目的の XML を返す SQL です。上記のSQLに別の結合を追加すると、<item/>
ノード内に<person/>
ノードが追加されますが、これは私が望むものではありません。
XML AUTO に関する記事を読んだことがありますが、例はこのような入れ子構造を返しません。たぶん、私はこれについてすべて間違っています。これに関するガイダンスはありますか?