2012-02-14 3 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은 값이 "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

관련 문제