<SSRSReport>
<OutputType>email</OutputType>
<email>
<emailTo>xyz.com</emailTo>
<emailReplyTo>dd@gmail.com</emailReplyTo>
<emailSubject>status report</emailSubject>
<emailBody>
</email>
</SSRSReport>
需要您帮助从xml类型的一列中存在的表中选择sql中的节点值。我已经尝试过的是:
select
T.id,
T.xml_data.value('(SSRSReport/email/@emailTo)[1]', 'varchar(50)') as PropertyName
from
abc as T
where
T.xml_data.exist('/email/emailTo') = 'xyz.com'
但它将属性名称列返回为null。
答案 0 :(得分:5)
你非常接近 - 但由于<emailTo>
是元素(不是属性),你需要使用:
select
T.id,
T.xml_data.value('(SSRSReport/email/emailTo)[1]', 'varchar(50)') as PropertyName
使用/emailTo
(不是/@emailTo
)作为XPath表达式的最后一部分。
此外,.exist()
函数只能检查是否存在XML元素(或属性),因此您可以检查<emailTo>
元素是否存在(或不存在),但是你不能比较一个值。所以你的WHERE
条款无效 - 你可能想要:
where
T.xml_data.value('(SSRSReport/email/emailTo)[1]', 'varchar(50)') = 'xyz.com'