gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 07:51:44 24 4
gpt4 key购买 nike

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

我的查询:

select @xml.query('for $s at $count in /Root/Persons/Person
return <Person ID="{$count}">{$s}</Person>')

这里唯一的问题是这在 SQL Server 中不受支持,我收到一个错误:
Msg 9335, Level 16, State 1, Line 16
XQuery [query()]: The XQuery syntax 'at' is not supported.

我也尝试过使用 let 关键字并定义新变量,但我不知道如何在每次迭代中增加该变量的值?

感谢所有的答案,弗兰基

最佳答案

XQuery 是一种声明性语言,you cannot use let to increment a counter .

对丢失的 at 的一种相当骇人听闻的解决方法特征是计算前面的兄弟 <person/>标签:

for $person in /Root/Persons/Person
let $count := count($person/preceding-sibling::Person) + 1
return <Person ID="{$count}">{$person}</Person>

请注意,此代码将具有 O(n^2)运行时如果没有被执行引擎优化(它可能不会这样做),因为重复的先前同级扫描。

编辑 :如评论中所述,MS SQL 甚至不支持 preceding-sibling轴。他们确实支持 << node order comparison operator , 尽管。应该完全支持此查询:
for $person in /Root/Persons/Person
let $count := count($person/parent::Persons/Person[. << $person]) + 1
return <Person ID="{$count}">{$person}</Person>

顺便说一句,您可能只想粘贴此人的姓名,因此最好使用
(: snip :)
return <Person ID="{$count}">{data($person)}</Person>

关于sql-server-2008-r2 - Sql server 中的 FLWOR 计数命中数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18716350/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com