Xquery中[1]的意义是什么?

时间:2012-04-09 20:46:02

标签: sql-server tsql sql-server-2005 xquery xquery-sql

我是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)

非常感谢

2 个答案:

答案 0 :(得分:8)

在XPath中,[expression]语法表示位置路径上的predicate[1][position()=1]的{​​{3}},意思是'第一个元素'。在SQL Server中使用XPath时,[1](或确定性地过滤到最多一个元素的任何其他谓词)是必需的,因为它将XPath表达式从一个返回任意数量的元素的表达式转换为确定性地返回0或1的元素。元素,因此转换为标量表达式,这是abbreviated syntax所要求的:

  

XQuery最多只能返回一个值。

答案 1 :(得分:3)

在这种情况下,您说您想要当前Value的第一个/data/row元素和相同的第一个Text元素。如果你在那里放[2]那就意味着第二个。通过将[1]置于您知道的只有一行的位置,您可以确保只有一个元素将进入value函数。