Sql server 2008 r2 Sql server中的FLWOR计数命中数

Sql server 2008 r2 Sql server中的FLWOR计数命中数,sql-server-2008-r2,xquery,xquery-sql,flwor,Sql Server 2008 R2,Xquery,Xquery Sql,Flwor,我正在使用SQLServer2008R2。我的问题是,我想计算使用FLWOR从XQuery查询中收到的点击数。对于每一次点击,我想要一个连续的数字,比如:0,1,2,3,4 我的问题是: select @xml.query('for $s at $count in /Root/Persons/Person return <Person ID="{$count}">{$s}</Person>') 我也尝试过使用let关键字并定义新变量,但我不知道如何在每次迭代中增加该变量

我正在使用SQLServer2008R2。我的问题是,我想计算使用FLWOR从XQuery查询中收到的点击数。对于每一次点击,我想要一个连续的数字,比如:0,1,2,3,4

我的问题是:

select @xml.query('for $s at $count in /Root/Persons/Person
return <Person ID="{$count}">{$s}</Person>')
我也尝试过使用let关键字并定义新变量,但我不知道如何在每次迭代中增加该变量的值


感谢所有的回答,Frenky是一种声明性语言

对于缺少的
at
功能,一个相当老练的解决方法是计算前面的同级
标记:

for $person in /Root/Persons/Person
let $count := count($person/preceding-sibling::Person) + 1
return <Person ID="{$count}">{$person}</Person>
顺便说一下,您可能只想粘贴此人的姓名,所以最好使用

(: snip :)
return <Person ID="{$count}">{data($person)}</Person>
(:snip:)
返回{data($person)}

如果您不太熟悉XQuery,另一种可能更容易阅读的公式:

for $i in (1 to count(/Root/Persons/Person))
let $person := /Root/Persons/Person[$i]
return
    <Person ID="{$i}">{$person}</Person>
对于$i in(1计算(/Root/Persons/Persons))
让$person:=/Root/Persons/person[$i]
返回
{$person}
此外,如果SQL Server确实/曾经支持XQuery 3.0,那么您可以执行以下非常好的操作:

/Root/Persons/Person ! <Person ID="{position()}">{data(.)}</Person>
/Root/Persons/Person!{数据(.)}

非常感谢您的回答。在Sql server 2008R2中,前面的同级也不受支持,我收到的错误是:Msg 9335,级别16,状态1,第16行XQuery[query()]:XQuery语法“preference sibling”不受支持。哇,没想到Microsoft会对XQuery造成如此严重的破坏。我用另一个应该支持的更难看的解决方法扩展了我的答案。它可以工作)语法尽可能难看,远不是直观的,但它可以工作)再次感谢你。只是为了赞美一下:在SQL Server 2005上,我有一个错误:XQuery语法“to”不受支持。
for $i in (1 to count(/Root/Persons/Person))
let $person := /Root/Persons/Person[$i]
return
    <Person ID="{$i}">{$person}</Person>
/Root/Persons/Person ! <Person ID="{position()}">{data(.)}</Person>