2012-02-14 32 views
0

我有一個XML文件,我試圖使用SSMS 2008分解成一個表。該XML文件由各種元素組成。 這是它的結構。我如何將這些數據提取到表格中?如何通過T-SQL解析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列的記錄。因此,我只需要將此列逐個分解,逐行。

+0

你能提供所需的從上面XML表格輸出? – 2012-02-14 18:06:27

回答

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