如何通过T-SQL解析XML元素?

时间:2012-02-14 17:35:04

标签: xml sql-server-2008

我有一个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列,一排一排。

1 个答案:

答案 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)

SE-Data