我需要从我的关系数据库中提取数据作为 XML,并且我需要为我提取的每条记录分配一个数字。我编写了以下 XQuery ...
<myRecords> {
let $i := 0
for $Territories in collection("Northwind.dbo.Territories")/Territories
let $i := $i + 1
return
<territory rec_count="{$i}">
{$Territories/TerritoryDescription/text()}
</territory>
} </myRecords>
...我没有得到预期的结果:
<myRecords>
<territory rec_count="1">Westboro</territory>
<territory rec_count="1">Bedford</territory>
<territory rec_count="1">Georgetown</territory>
…
记录号不增加。为什么?
XQuery 是一种没有副作用的函数式语言——例如,您不能像在 Java 或 C# 中那样在 XQuery 中真正创建状态概念。在某些情况下,您可以使用递归函数模拟状态,但要解决此问题,有一个更简单的解决方案:您可以使用位置变量。这是 XQuery:
<myRecords> {
for $Territories at $i in collection("Northwind.dbo.Territories")/Territories
return
<territory rec_count="{$i}">
{$Territories/TerritoryDescription/text()}
</territory>
} </myRecords>
这是(希望的)结果:
<myRecords>
<territory rec_count="1">Westboro</territory>
<territory rec_count="2">Bedford</territory>
<territory rec_count="3">Georgetow</territory>
…