使用XQuery将值与XML中的字段匹配

时间:2011-01-13 20:43:09

标签: sql xml xquery

我在数据库中有一堆行,这些行都包含一个类似于以下内容的元素

<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 :(得分:0)

正确的XPath应该是:

/ModuleData/Varchar

因为它是一个元素,而不是一个属性。