我有一个XML文件,我试图使用SSMS 2008分解成一个表.XML文件由各种元素组成。 这是它的结构。如何将这些数据提取到表中?
<course>
<lesson id="I00C8A1A645094C819BC9A0EBE2563E27">
<element name="cmi.core.student_name">Michael,Robin</element>
<element name="cmi.core.student_id">73Y4TZ0000K0</element>
<element name="cmi.core.credit">credit</element>
<element name="cmi.core.lesson_mode">normal</element>
<element name="cmi.core.lesson_status">completed</element>
<element name="cmi.core.entry" />
</lesson>
<lesson id="I66BCB22712934777BE7EB16468D43F7A">
<element name="cmi.core.student_name">Michael,Robin</element>
<element name="cmi.core.student_id">73Y4TZ0000K0</element>
<element name="cmi.core.credit">credit</element>
<element name="cmi.core.lesson_mode">normal</element>
<element name="cmi.core.lesson_status">completed</element>
<element name="cmi.core.entry" />
</lesson>
还有一点需要注意的是,上述记录仅来自一列。为简单起见,假设只有两列。第1列是一个唯一标识符,其值为:“C00707”,“C00708”,“C00709”等。每一行都有一个类似于上面第2列的记录。所以我只需要按元素分解这个第2列,一排一排。
答案 0 :(得分:0)
select
ID,
T.N.value('(element[@name="cmi.core.student_name"])[1]', 'nvarchar(max)') as student_name,
T.N.value('(element[@name="cmi.core.student_id"])[1]', 'nvarchar(max)') as student_id,
T.N.value('(element[@name="cmi.core.credit"])[1]', 'nvarchar(max)') as credit,
T.N.value('(element[@name="cmi.core.lesson_mode"])[1]', 'nvarchar(max)') as lesson_mode,
T.N.value('(element[@name="cmi.core.lesson_status"])[1]', 'nvarchar(max)') as lesson_status
from YourTable
cross apply XMLCol.nodes('/course/lesson') as T(N)