nodes()或openxml是否以与在xml中找到的顺序相同的顺序返回行?

Kan*_*ara 6 sql sql-server openxml sql-server-2008

我有一个xml,我需要使用openxml或nodes()进行解析.xml包含少量使用不同值重复的子标记,如下所示.

<root>
    <value>10</value>
    <value>12</value>
    <value>11</value>
    <value>1</value>
    <value>15</value>
<root>
Run Code Online (Sandbox Code Playgroud)

对于我的代码,非常重要的是我以与xml中相同的顺序返回所有这些行.我用谷歌搜索和gogled但没有告诉我@mp:id是否总是以与xml中相同的顺序返回.或者,如果nodes()以与遇到它们相同的顺序返回值.

所有我想知道的是我是否可以信任这两种方法中的任何一种并且对行的正确顺序感到满意.

PS原谅上述文本中的任何错误或错误,我也不喜欢在Android窗口中输入代码.

Rem*_*anu 0

XPath 允许您按序数显式选择节点:'/root[1]/value[1]'是第一个元素,'/root[1]/value[2]'是第二个元素等。也可以使用'(/root/value)[1]''(/root/value[2])'。这样您就可以准确选择所需的元素,选择元素 1、元素 2、元素 3 等将为您提供受控的顺序。缓慢但受控制。

更新PS 这不是很好吗?

declare @x xml = '<root>
    <value>10</value>
    <value>12</value>
    <value>11</value>
    <value>1</value>
    <value>15</value>
<root>';

select x.value(N'position()', N'int') as position,
  x.value(N'.', 'int') as value
  from @x.nodes(N'//root/value') t(x)
Run Code Online (Sandbox Code Playgroud)

不幸的是,并不是...

Msg 2371, Level 16, State 1, Line 9
XQuery [value()]: 'position()' can only be used within a predicate or XPath selector
Run Code Online (Sandbox Code Playgroud)

而这个错误的存在让我担心有时顺序可能会被破坏......