我是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)
非常感谢
答案 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
函数。