0

.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 の功績は、クロス アプライを機能させる方法についてのリンク投稿です。

4

1 に答える 1

0
select 
    parent.value('(@ID)[1]', 'int') AS 'ID',
    parent.value('(Title)[1]', 'varchar(100)') AS 'Title',
    parent.value('(Description)[1]', 'varchar(100)') AS 'Description',
    child.value('(@ID)[1]', 'int') AS 'ChildID',
    child.value('(Title)[1]', 'varchar(100)') AS 'ChildTitle',
    child.value('(StartDate)[1]', 'DATETIME') AS 'StartDate',
    child.value('(EndDate)[1]', 'DATETIME') AS 'EndDate'    
 from 
      yourtable
           cross apply
      xmldata.nodes('/ParentElement') xp(parent)
           cross apply
      xp.parent.nodes('ChildElement') xc(child)

xmldataxmlデータを含むフィールドはどこですかyourtable

于 2014-05-30T15:23:40.433 に答える