2012-03-07 92 views
0
DECLARE @str NVARCHAR(MAX) 
SET @str = 
    '<bands > 
    <title>my bands</title> 

    <band> 
     <fullName>beatles</fullName> 
     <members> 
       <member age="12">john </member> 
       <member age="13">paul </member> 
       <member age="14">george </member> 
       <member age="15">ringo </member> 
      </members> 
    </band> 


    <band> 
     <fullName>doors</fullName> 
     <members> 
       <member age="20">jim </member> 
       <member age="50">ray </member> 
       <member age="40">john </member> 
       <member age="30">robby </member> 
      </members> 
    </band> 

</bands>' 

查詢:SQL服務器OPENXML無法正常工作?

DECLARE @idoc int 
EXEC sp_xml_preparedocument @idoc OUTPUT, @str 

SELECT * 
FROM  OPENXML (@idoc, '/bands/band/members',2) 
      WITH (member NVARCHAR(MAX)  ) 

我的結果是:

enter image description here

這是爲什麼?

我希望看到整個成員.... XPATH /bands/band/members正在引用包含幾個孩子的節點。

我在做什麼錯了?

回答

3

這應該給你所有的成員

DECLARE @idoc int 

EXEC sp_xml_preparedocument @idoc OUTPUT, @str 

SELECT * 
FROM 
    OPENXML (@idoc, '/bands/band/members/member', 2) 
    WITH 
    (
     member NVARCHAR(20) '.', 
     age int '@age', 
     fullName NVARCHAR(20) '../../fullName' 
    ) 
+0

+1的 - 運行完美 – Lamak 2012-03-07 21:43:14

+0

可以exaplin MYNE爲什麼沒有工作? – 2012-03-08 06:04:20

+0

它只返回2行,因爲在整個文檔中只有2個「」實例。當你選擇''這就是XPath停止的地方,並且沒有移動到子節點。另外,'.'給你一個當前元素的值。 – 2012-03-08 13:01:17

相關問題