SQL-сервер OPENXML не работает правильно? - PullRequest
0 голосов
/ 08 марта 2012
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>'

запрос:

 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 ссылается на узел, который содержит НЕСКОЛЬКО дочерних элементов.

Что я делаю неправильно?

1 Ответ

3 голосов
/ 08 марта 2012

Это должно дать вам всех членов

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'
    )
...