2015-09-25 148 views
0

鑑於以下XPath CTE,我想在Field2上進行過濾。如何才能完成?我只是學習XPath。使用SQL Server 2008 R2。過濾器cte xpath查詢

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; 

回答

1

如果我理解正確的問題,你想過濾使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; 
+0

完美。謝謝! –