Сопоставление значения с полем в XML с использованием XQuery - PullRequest
0 голосов
/ 13 января 2011

У меня есть несколько строк в базе данных, которые содержат элемент, который выглядит следующим образом

<ModuleData ModuleFieldGU="4dcdde21-40c6-4d1a-9fe1-1841935d3a68">
 <DateTime>0001-01-01T00:00:00</DateTime>
 <Boolean>false</Boolean>
 <Int>0</Int>
 <Varchar>Test District</Varchar>
 <GUID>00000000-0000-0000-0000-000000000000</GUID>
 <Modified>true</Modified>
 </ModuleData>

Мне нужно просмотреть все это и сопоставить, где элемент / узел varchar имеет определенное значение.

Я попробовал оба из следующих, и ни один из них, похоже, не работает для меня

SELECT 
    Data.Element.value('(@Varchar)[1]', 'varchar(255)') as UserEmail 
    FROM
        ModuleData
    CROSS APPLY
        XML_DATA.nodes('/ModuleData') AS Data(Element)
    WHERE
    Data.Element.value('(@Varchar)[1]', 'varchar(255)') = @UserEmail

и

SELECT 
   CAST(XML_DATA.query('data(/ModuleData[@Varchar])') as varchar(255)) as UserEmail
FROM 
   ModuleData
WHERE 
   XML_DATA.exist('/ModuleData[@Varchar = sql:variable("@UserEmail")]') = 1

но это не работает. Я не совсем разбираюсь в тонкостях использования XQuery для извлечения данных из XML. Кто-нибудь может указать мне правильное направление?

1 Ответ

0 голосов
/ 14 января 2011

Правильный XPath должен быть:

/ModuleData/Varchar

Потому что это элемент, а не атрибут.

...