.node()
XML 変数の代わりに特定の列にメソッドを適用する方法はありますか? XML ファイルを SQL テーブルに転送する作業を行っています。一部の XML ファイルには子ノードがあります。そのため、Cross Apply 関数を使用して、子と親を接続しています。
たとえば、テーブルの列の 1 つに子 xml ファイルが格納されているとします。1 つのセルには、次の XML が含まれています。
DECLARE @input XML
SET @INPUT = N'
<ParentElement ID="1">
<Title>parent1</Title>
<Description />
<ChildElement ID="6">
<Title>Child 4</Title>
<Description />
<StartDate>2010-01-25T00:00:00</StartDate>
<EndDate>2010-01-25T00:00:00</EndDate>
</ChildElement>
<ChildElement ID="0">
<Title>Child1</Title>
<Description />
<StartDate>2010-01-25T00:00:00</StartDate>
<EndDate>2010-01-25T00:00:00</EndDate>
</ChildElement>
<ChildElement ID="8">
<Title>Child6</Title>
<Description />
<StartDate>2010-01-25T00:00:00</StartDate>
<EndDate>2010-01-25T00:00:00</EndDate>
</ChildElement>
</ParentElement>'
これは私Cross Apply
のように見えるものです:
SELECT
Parent.Elm.value('(@ID)[1]', 'int') AS 'ID',
Parent.Elm.value('(Title)[1]', 'varchar(100)') AS 'Title',
Parent.Elm.value('(Description)[1]', 'varchar(100)') AS 'Description',
Child.Elm.value('(@ID)[1]', 'int') AS 'ChildID',
Child.Elm.value('(Title)[1]', 'varchar(100)') AS 'ChildTitle',
Child.Elm.value('(StartDate)[1]', 'DATETIME') AS 'StartDate',
Child.Elm.value('(EndDate)[1]', 'DATETIME') AS 'EndDate'
FROM
@input.nodes('/ParentElement') AS Parent(Elm)
CROSS APPLY
Parent.Elm.nodes('ChildElement') AS Child(Elm)
現在、メソッドを適用できるように、その child-xml-node データを XML セルから取り出して変数 ( @input
)に格納する必要があります。.nodes()
その列の特定のセルごとにノード メソッドを簡単に呼び出せるようにしたいと考えています。それを行う方法はありますか?
ご協力いただきありがとうございます!
Beta033 と marc_s の功績は、クロス アプライを機能させる方法についてのリンク投稿です。