4

我是 SQL Server 中的 xquery 新手。

我经常遇到使用带有属性的 [1] 的 xquery 表达式。

有人可以解释一下这是什么意思吗?

这是一个例子

declare @aa xml
set @aa='<data>
  <row>
    <Value>1</Value>
    <Text>Masters</Text>
  </row>
  <row>
    <Value>2</Value>
    <Text>Transactions</Text>
  </row>
  <row>
    <Value>3</Value>
    <Text>Misch. Reports</Text>
  </row>
</data>'


select a.f.value('Value[1]','varchar(50)'),   --  why [1] here ?
   a.f.value('Text[1]','varchar(50)')         --  and here too..
 from @aa.nodes('/data/row') as a(f)

谢谢n问候

4

2 回答 2

9

在 XPath 中,[expression]语法表示位置路径上的谓词。[1]是 的缩写语法[position()=1]表示“第一个元素”。在 SQL Server 中使用 XPath [1](或任何其他确定性过滤到最多一个元素的谓词)是必需的,因为它将 XPath 表达式从返回任意数量元素的表达式转换为确定性返回 0 或 1 个元素的表达式,从而转换为一个标量表达式,这.value()需要:

XQuery 最多只能返回一个值。

于 2012-04-09T21:00:24.950 回答
3

在这种情况下,您是说您想要Value当前/data/row的第一个Text元素和相同的第一个元素。如果你把a放在[2]那里,这将意味着第二个。即使在您知道只有一行的地方也放置一个 [1],您会感到安全,只有一个元素会进入value函数。

于 2012-04-09T20:51:03.130 回答