Xquery 有没有办法对提取的记录进行编号。
我需要从关系数据库中提取XML格式的数据,并且需要为提取的每条记录分配一个数字。我编写了以下XQueryXquery 有没有办法对提取的记录进行编号。,xquery,Xquery,我需要从关系数据库中提取XML格式的数据,并且需要为提取的每条记录分配一个数字。我编写了以下XQuery <myRecords> { let $i := 0 for $Territories in collection("Northwind.dbo.Territories")/Territories let $i := $i + 1 return <territory rec_count="{$i}">
<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>
{
设$i:=0
对于$Territions in collection(“Northwind.dbo.Territions”)/Territions
设$i:=$i+1
返回
{$Territions/TerritoryDescription/text()}
}
。。。我没有得到我期望的结果:
<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>
{
对于$i收款的$Territions(“Northwind.dbo.Territions”)/Territions
返回
{$Territions/TerritoryDescription/text()}
}
下面是(希望的)结果:
韦斯特博罗
贝德福德
乔治敦
…
在内部中,创建一个名为i
的新变量
它被定义为将外部$i
的值加上一:即0+1
,这将给出1
在内部中,创建一个名为i
的新变量
它被定义为将外部$i
的值加上一:即0+1
,这将为1
添加一点到Dimitre的答案中,下面是如何执行您尝试执行的操作:
<myRecords> {
for $Territories at $i in collection("Northwind.dbo.Territories")/Territories
return
<territory rec_count="{$i}">
{$Territories/TerritoryDescription/text()}
</territory>
} </myRecords>
{
对于$i收款的$Territions(“Northwind.dbo.Territions”)/Territions
返回
{$Territions/TerritoryDescription/text()}
}
正如Dimitre所指出的,for中的let不会在每次迭代中保留值。for的at子句将满足您的需要 为Dimitre的答案添加一点内容,下面是如何做您正试图做的事情:
<myRecords> {
for $Territories at $i in collection("Northwind.dbo.Territories")/Territories
return
<territory rec_count="{$i}">
{$Territories/TerritoryDescription/text()}
</territory>
} </myRecords>
{
对于$i收款的$Territions(“Northwind.dbo.Territions”)/Territions
返回
{$Territions/TerritoryDescription/text()}
}
正如Dimitre所指出的,for中的let不会在每次迭代中保留值。for的at子句将满足您的需要
<myRecords> {
for $Territories at $i in collection("Northwind.dbo.Territories")/Territories
return
<territory rec_count="{$i}">
{$Territories/TerritoryDescription/text()}
</territory>
} </myRecords>