2014-10-31 48 views
1

我想解析此Xml以獲得以下結果。該表的名稱是SchoolRecord如何將XML解析爲列

Name    Answer 
School name  87f6c8bf-cafc-40fb-a082-ca9d5bfaf1e0 
Course    2f23e1cb-181e-4af2-a9ec-3dd68530d1d5 
Father    NULL 
Mother    NULL 

我使用SQL Server 2012的這是我已經試過,但沒有奏效

1.

Select 
S.userdefinedxml.value('(/ControlGroup/UserDefinedControls/Control/Name)[1]','varchar(max)') as Name, 
S.userdefinedxml.value('(/ControlGroup/UserDefinedControls/Control/Answer)[1]','varchar(max)') as Answer 
From SchoolRecord S 

2.

Select 
S.userdefinedxml.value('(School_Data/ControlGroup/UserDefinedControls/Control/Name)[1]','varchar(max)') as Name, 
S.userdefinedxml.value('(School_Data/ControlGroup/UserDefinedControls/Control/Answer)[1]','varchar(max)') as Answer 
From SchoolRecord S 

3.

Select 
S.userdefinedxml.value('(Data/School_Data/ControlGroup/UserDefinedControls/Control/Name)[1]','varchar(max)') as Name, 
S.userdefinedxml.value('(Data/School_Data/ControlGroup/UserDefinedControls/Control/Answer)[1]','varchar(max)') as Answer 
From SchoolRecord S 

我的結果

Name  Answer 
NULL  NULL 
NULL  NULL 
NULL  NULL 
NULL  NULL 

我的XML:

 <data> 
      <School_Data> 
      <ControlGroup> 
       <UserDefinedControls> 
       <Control> 
        <ControlType>FIND</ControlType> 
        <Name>School name</Name> 
        <Answer>87f6c8bf-cafc-40fb-a082-ca9d5bfaf1e0</Answer> 
       </Control> 
       </UserDefinedControls> 
       <UserDefinedControls> 
       <Control> 
        <ControlType>FIND</ControlType> 
        <Name>Course</Name> 
        <Answer>2f23e1cb-181e-4af2-a9ec-3dd68530d1d5</Answer> 
       </Control> 
       </UserDefinedControls> 
       <UserDefinedControls> 
       <Control> 
        <ControlType>FIND</ControlType> 
        <Name>Father</Name> 
        <Answer /> 
       </Control> 
       </UserDefinedControls> 
       <UserDefinedControls> 
       <Control> 
        <ControlType>FIND</ControlType> 
        <Name>Mother</Name> 
        <Answer /> 
       </Control> 
       </UserDefinedControls> 
      </ControlGroup> 
      </School_Data> 
     </data> 
+1

XML區分大小寫,因此您可以嘗試'data'而不是'Data'。例如'S.userdefinedxml.value('(data/School_Data/ControlGroup/UserDefinedControls/Control/Name)[1]','varchar(max)')as Name,' – Yuck 2014-10-31 22:43:59

回答

0

我看到呸提到的元素和屬性名稱是區分大小寫的。下面是一個返回每個控件的名稱和答案的示例:

SELECT 
    Control.value('Name[1]','varchar(max)') as Name, 
    Control.value('Answer[1]','varchar(max)') as Answer 
FROM dbo.SchoolRecord S 
CROSS APPLY S.userdefinedxml.nodes('/data/School_Data/ControlGroup/UserDefinedControls/Control') AS UserDefinedControls(Control); 
+0

謝謝,我能弄明白。 XML區分大小寫。我將數據更改爲數據。 – Mukehp 2014-11-01 15:03:35