簡體   English   中英

如何遍歷SQL結果(例如for循環和數組)?

[英]How can I iterate through SQL results like a for loop and an array?

我有一個表,我只想從表中選擇一行行ID,但要按特定順序。 然后,我想遍歷該列,如下所示:

for (i=0; i<rows.length; i++)
{
  if(i==rows.length-1)
    UPDATE myTable SET nextID = NULL WHERE ID = rows[i]
  ELSE
    UPDATE myTable SET nextID = rows[i+1] WHERE ID = rows[i]
}

我只是不知道如何使用這樣的索引訪問我的select語句的結果。 有沒有辦法在sql server中做到這一點?

您可以使用游標,也可以使用更智能的工具。

您的示例應該能夠很容易地按照以下方式編寫:

update mytable set nextID = LEAD(id,1) over (order by id)

Lead(id,1)將獲取記錄集中前一行的下一個ID,並使用它更新nextID字段。 如果找不到,它將返回null。 無需循環或條件邏輯!

編輯:我忘記了over子句。 這是告訴您如何訂購線索的部分

由於您沒有提供許多詳細信息,因此我們假設您的表看起來像這樣:

create table MyTable (
  Id int not null primary key,
  Name varchar(50) not null,
  NextId int
)

我只想從中選擇一行行ID, 要按特定順序

我們只說在這種情況下,您決定按Name字母順序對行進行排序。 因此,讓我們假設您要遍歷的select語句如下所示:

select Id
  from MyTable
 order by Name

就是這種情況,您無需遍歷行並嘗試使用您提供的偽代碼來更新每一行,而是可以用一條執行完全相同的工作的update語句替換整個內容:

with cte as (
  select *,
         NewNextId = lead(Id) over (order by Name)
    from MyTable
)
update cte
   set NextId = NewNextId

只要確保將order by子句調整實際的特定順序即可 我只是在示例中使用Name ,但是在您的情況下,可能還有其他用途。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM