1. ホーム
  2. sql

[解決済み] SQL Server - xml カラムの xml 子ノードを返します。

2022-02-19 09:10:01

質問

列を持つ表Tが与えられた。

ID UNIQUEIDENTIFIER
CreatedDate DATETIME
XmlData XML

ここで、XmlDataは以下のような構造になっています。

<application>
    <details firstname="first" lastname="last">
        <statement>statement</statement>
    </details>
    <educationHistory>
        <education subject="subject1" />
        <education subject="subject2" />
    </educationHistory>
    <experienceHistory>
        <examiningExperienceHistory>
            <examiningExperience module="module1" />
            <examiningExperience module="module2" />
        </examiningExperienceHistory>
        <teachingExperienceHistory>
            <teachingExperience module="module1" />
            <teachingExperience module="module2" />
        </teachingExperienceHistory>
    </experienceHistory>
</application>

このように抽出したものを返したいのですが

ID Date       FirstName LastName Education    ExaminingExp TeachingExp
-----------------------------------------------------------------------
1  02-10-2012 First     Last     <xmlextract> <xmlextract> <xmlextract>

今のところ、私は

SELECT ID,
       CreatedDate [Date],
       XmlData.value('(application/details/@firstname)[1]','varchar(max)') [FirstName],
       XmlData.value('(application/details/@lastname)[1]','varchar(max)') [LastName]
FROM T

最後の3列で悩んでいます。各記録について、教育/試験経験、学歴を記載する必要があります。どなたか教えてください。

解決方法を教えてください。

使用方法 .query でxmlを展開します。

エグ

select 
XmlData.query('/application/educationHistory/*'),
XmlData.query('/application/experienceHistory/examiningExperienceHistory/*'),
XmlData.query('/application/experienceHistory/teachingExperienceHistory/*')