2012-07-07 89 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

相關問題