2013-07-23 5 views
4
<SSRSReport> 
    <OutputType>email</OutputType> 
    <email> 
    <emailTo>xyz.com</emailTo> 
    <emailReplyTo>[email protected]</emailReplyTo> 
    <emailSubject>status report</emailSubject> 
    <emailBody> 
</email> 
</SSRSReport> 

Нужна помощь по выбору значения узла в sql из таблицы, существующей в одном столбце типа xml. Что я уже пробовал:Как получить значение xml из столбца таблицы

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.

ответ

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' 
+0

Спасибо, брату. Это прекрасно работает для меня ... –

Смежные вопросы