如何从表列中获取xml值
Posted
技术标签:
【中文标题】如何从表列中获取xml值【英文标题】:How to get xml value from table column 【发布时间】:2013-07-23 08:04:03 【问题描述】:<s-s-rSReport>
<OutputType>email</OutputType>
<email>
<emailTo>xyz.com</emailTo>
<emailReplyTo>dd@gmail.com</emailReplyTo>
<emailSubject>status report</emailSubject>
<emailBody>
</email>
</s-s-rSReport>
在从存在于 xml 类型的一列中的表中选择 sql 中的节点值时需要您的帮助。我已经尝试过的是:
select
T.id,
T.xml_data.value('(s-s-rSReport/email/@emailTo)[1]', 'varchar(50)') as PropertyName
from
abc as T
where
T.xml_data.exist('/email/emailTo') = 'xyz.com'
但它将属性名称列返回为空。
【问题讨论】:
【参考方案1】:你已经很接近了 - 但由于 <emailTo>
是一个 元素(不是属性),你需要使用:
select
T.id,
T.xml_data.value('(s-s-rSReport/email/emailTo)[1]', 'varchar(50)') as PropertyName
使用/emailTo
(不是/@emailTo
)作为XPath 表达式的最后一部分。
此外,.exist()
函数只能检查是否存在 XML 元素(或属性),因此您可以检查是否存在(或不存在)<emailTo>
元素,但无法与一个值。所以你的WHERE
子句是无效的——你可能想要:
where
T.xml_data.value('(s-s-rSReport/email/emailTo)[1]', 'varchar(50)') = 'xyz.com'
【讨论】:
以上是关于如何从表列中获取xml值的主要内容,如果未能解决你的问题,请参考以下文章