2012-02-14 7 views
0

SSMS 2008を使用してテーブルに分解しようとしているXMLファイルがあります.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つの注意点は、上記のレコードがただ1つの列から来ていることです。簡単にするために、2つの列しかないと仮定します。列1は、 "C00707"、 "C00708"、 "C00709"などの値を持つuniqueidentifierです。各行には、列2と同様のレコードがあります。この列2を、行単位で

+0

あなたはXML上から目的のテーブルの出力を提供してもらえますか? –

答えて

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

関連する問題