2012-07-07 165 views
1

我需要从我的关系数据库中提取数据作为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> 
… 

回答

1

要有点添加到Dimitre的答案,这里是如何做你想做什么:

<myRecords> { 
    for $Territories at $i in collection("Northwind.dbo.Territories")/Territories 
    return 
    <territory rec_count="{$i}"> 
     {$Territories/TerritoryDescription/text()} 
    </territory> 
} </myRecords> 

由于Dimitre指出,一个让里面的不保留与每个迭代的值。 for的at子句将做你需要的。

+0

其工作,非常感谢你。 – Siddhu 2012-07-09 04:06:40

0
let $i := 0 
    for $Territories in collection("Northwind.dbo.Territories")/Territories 
    let $i := $i + 1 
    return 

在内let创建一个名为i一个变量。

它被定义为具有$i加一的值:即0 + 1,这给1

相关问题