有没有办法将.node()
方法应用于特定列而不是 XML 变量?我正在将 XML 文件传输到 SQL 表中。我的一些 XML 文件有子节点。所以我正在使用 Cross Apply 功能将孩子与父母联系起来。
例如,我的表中的一列存储了一个子 xml 文件。一个单元格包含以下 XML:(请注意,我已提取 xml 并将其存储在 @input 变量中)。
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)
目前,我必须从 XML 单元中提取子 XML 节点数据并将其存储在变量 ( @input
) 中,以便我可以将.nodes()
方法应用于它。我希望能够简单地调用该列中每个特定单元格的节点方法。有没有办法做到这一点?
谢谢你的帮助!
归功于 Beta033 和 marc_s 来自这篇关于如何让十字架申请工作的链接帖子!