好的,所以我试图将一个大型的复杂XML文件加载到多个表中。我试图向下钻取到最小的节点之一,但随后无法访问其上方的节点。
use [ChaseDB]
DECLARE @x XML, @hdoc int, @Path varchar(1000),
@SegmentNotePath varchar(1000)
SELECT @x=P
FROM OPENROWSET (BULK 'C:\XML\XmlFilePractice.xml', SINGLE_BLOB) as
Products(P)
EXEC sp_xml_preparedocument @hdoc OUTPUT, @x
SET @Path= 'Root/Segment/OtherNode/SpecificNode'
SELECT * INTO #TempTable
FROM OPENXML(@hdoc, @Path, 2)
WITH(
SegmentID varchar(20) '../../@ID',
SegmentName varchar(1000) '../../@Name',
Note varchar(1000)'Note',
NoteType varchar(50) '@Type',
SpecificNode int '@ID',
)
让我们说XML是这样的:
<Root>
<Segment ID="AS" Name="Amper Sands">
<Notes>
<Note></Note>
</Notes>
<OtherNode>
<SpecificNode></SpecificNode>
</OtherNode>
</Segment>
<Root>
因此,如果我的路径设置为SpecificNode,该如何访问Note?我知道您可以使用../../备份节点,但是可以这么说如何备份和追溯。
SET @Path= 'Root/Segment/OtherNode/SpecificNode'