我正在尝试构建一个 SQL 查询或过程来从多个表构建一个复杂的 XML 结果。这是在 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/>
元素。这可能是我对连接的理解或使用的问题,但此时我正在踩水。
创建没有<item/>
元素的 XML 的 SQL 如下所示。
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 的文章,但这些示例没有返回这样的嵌套结构。也许我正在处理这一切都是错误的。对此有何指导?