【发布时间】:2014-10-31 22:15:24
【问题描述】:
我想解析这个 Xml 以获得以下结果。表名是 SchoolRecord
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>
【问题讨论】:
-
XML 区分大小写,因此请尝试使用
data而不是Data。例如S.userdefinedxml.value('(data/School_Data/ControlGroup/UserDefinedControls/Control/Name)[1]','varchar(max)' ) as Name,
标签: sql-server xml sql-server-2012