I am using SQL Server 2008 R2. My problem is that I want to count number of hits that i receive from XQuery query using FLWOR. For each hit, I want a consecutive number, like: 0,1,2,3,4...
My query:
select @xml.query('for $s at $count in /Root/Persons/Person
return <Person ID="{$count}">{$s}</Person>')
The only problem here is this is not supported in SQL Server and I receive an error:
Msg 9335, Level 16, State 1, Line 16
XQuery [query()]: The XQuery syntax 'at' is not supported.
I've also tried with let keyword and define new variable but I don't know how to increase value of that variable with each iteration?
Thanks for all the answers, Frenky
XQuery is a declarative language, you cannot use
let
to increment a counter.A rather hackish workaround to the missing
at
feature would be to count the preceding sibling<person/>
tags:Be aware that this code will have
O(n^2)
runtime if not optimized by the execution engine (which it will probably not do) because of the repeated preceding sibling scans.Edit: As stated in the comments, MS SQL doesn't even support the
preceding-sibling
axis. They do support the<<
node order comparison operator, though. This query should be fully supported:By the way, you possibly only want to paste the person's name, so better use