【发布时间】:2011-04-08 13:42:20
【问题描述】:
我想做的事情我认为很简单,所以如果您熟悉 SQL Server 中的FOR XML,我建议您跳到底部并阅读 粗体文本部分: )
我正在尝试使用 SQL Server 2005 中的FOR XML 语句来实现我需要的结果。目前我有这个...
SELECT
txtReasonTypeID AS [ReasonTypeID]
,
(SELECT
[Reason].intReasonID,
[Reason].txtReason
FROM CST_lnkProfileReason INNER JOIN
CST_tblReason AS [Reason] ON CST_lnkProfileReason.intReasonID = [Reason].intReasonID
WHERE CST_lnkProfileReason.intProfileID = @intProfileID
AND CST_lnkProfileReason.txtReasonTypeID = [Response].txtReasonTypeID
ORDER BY Reason.txtReason
FOR XML AUTO, TYPE
)
,
(SELECT
[PulledSupportReason].intReasonID,
[PulledSupportReason].txtReason
FROM CST_lnkPulledSupportReason INNER JOIN
CST_tblReason AS [PulledSupportReason] ON CST_lnkPulledSupportReason.intReasonID = [PulledSupportReason].intReasonID
WHERE CST_lnkPulledSupportReason.intProfileID = @intProfileID
AND CST_lnkPulledSupportReason.txtReasonTypeID = [Response].txtReasonTypeID
ORDER BY [PulledSupportReason].txtReason
FOR XML AUTO, TYPE
)
FROM CST_tblReasonTypes AS [Response]
FOR XML AUTO, ROOT('ResponseProfile')
正在返回以下 XML...
<ResponseProfile>
<Response ReasonTypeID="ExampleType">
<Reason intReasonID="106" txtReason="Call Back - 1"/>
<Reason intReasonID="147" txtReason="Call Back - 2"/>
<PulledSupportReason intReasonID="892" txtReason="PS Reason a"/>
<PulledSupportReason intReasonID="893" txtReason="PS Reason b"/>
</Response>
...more <Response>s
</ResponseProfile>
如您所见,Reason 元素和PulledSupportReason 元素来自同一个表,尽管它们在此查询中是单独的元素。 (可能是一个糟糕的设计案例)但是 - 我想要的很简单,在 Reason 和 PulledSupportReason 元素周围放置一个父元素 例如...
<ResponseProfile>
<Response ReasonTypeID="ExampleType">
<Reasons>
<Reason intReasonID="106" txtReason="Call Back - 1"/>
<Reason intReasonID="147" txtReason="Call Back - 2"/>
</Reasons>
<PulledSupportReasons>
<PulledSupportReason intReasonID="892" txtReason="PS Reason a"/>
<PulledSupportReason intReasonID="893" txtReason="PS Reason b"/>
</PulledSupportReasons>
</Response>
...more <Response>s
</ResponseProfile>
我想我可以使用XML PATH 或XML EXPLICIT 来实现这一点?感谢您的帮助:)
【问题讨论】:
标签: xml sql-server-2005 xsd for-xml