0

我有一个表格,我将用户的搜索结果行保存为 xml 格式,如下所示:

<row id="5083" />
<row id="5085" />
<row id="5087" />
<row id="5090" />
<row id="5094" />
... (about 500,000 rows)

其中每个行元素包含将显示在结果页面中的结果记录的 id。现在我需要选择一个特定页面的 ID,例如第 2 页(第 10 个元素到第 20 个元素)

第一个问题是如何在 xquery 中获得该结果?我试图使用 position() 函数,但它没有工作......

select @results.query('for $x in (row)
where $x/position() > 10
return ($x)')

第二个问题是如何将我的结果 id 作为 sql 行而不是 xmlnodelist ?

4

2 回答 2

1

for $x in (row) where $x/position() > 10 return ($x)

$x 遍历第 10 个之后的所有行子代,但每个子代都返回一个长度为 1 且只有一个行元素的序列,因此 $x/position() 始终为 1。

你可以使用

row[position() >=10 and position() < 20]

这将返回位置 10 到 19 中的元素。如果您只想要 id 而不是元素节点,那么

row[position() >=10 and position() < 20]/string(@id)
于 2013-01-02T07:29:44.010 回答
1

您可以使用nodes() 方法来分解您的 XML,并使用value() 方法来提取属性的值id

SQL小提琴

查询 1

declare @results xml = '
<row id="5083" />
<row id="5085" />
<row id="5087" />
<row id="5090" />
<row id="5094" />'

select T.N.value('@id', 'int') as id
from @results.nodes('row[position() >= 2 and position() < 4]') as T(N)

结果

|   ID |
--------
| 5085 |
| 5087 |
于 2013-01-02T07:36:09.000 回答