过滤 cte xpath 查询

Filter cte xpath query

鉴于以下 XPath CTE,我想在 Field2 上进行过滤。怎样才能做到呢?我只是在学习 XPath。使用 SQL Server 2008 R2。

WITH ConvertedToXML AS 
( 
     SELECT TOP 10 
         xml_msg AS AsVarchar,
         CAST(xml_msg AS XML) AS AsXml 
     FROM 
         Table
     ORDER BY
         date_received desc
) 
SELECT 
    ConvertedToXML.AsXml.value('(//Field1)[1]', 'varchar(max)') AS Field1,
    ConvertedToXML.AsXml.value('(//Field2)[1]', 'Varchar(10)') as Field2,
    ConvertedToXML.AsVarchar,
    ConvertedToXML.AsXml 
Into #TempXML
FROM ConvertedToXML;

如果我对问题的理解正确,你想过滤 Field2 值等于特定值的行,例如 foo,你可以这样做:

SELECT 
    ......
    ......
Into #TempXML
FROM ConvertedToXML
WHERE ConvertedToXML.AsXml.value('(//Field2)[1]', 'Varchar(10)') = 'foo';

或使用 XPath 谓词获取 Field2 个值等于 "foo" 的元素,并使用 exists() 方法执行 XPath :

SELECT 
    ......
    ......
Into #TempXML
FROM ConvertedToXML
WHERE ConvertedToXML.AsXml.exists('(//Field2[.="foo"])[1]', 'Varchar(10)') = 1;