如何使用While循环更新SQL Server表中特定列中的某些记录(或记录范围)?

时间:2019-02-17 11:40:49

标签: sql sql-server

假设我有一个包含列IdTransactionNo的表。

Id列的ID范围从1到3000。

我需要做的是将TransactionNo列的ID更新为1000到2000。

换句话说,TransactionNo只能为Id进行更新,范围为1000到2000,且每个Id向上递增一个(++ 1)。

由于这是一项繁琐的工作,所以我正在寻找一个while循环解决方案来更新此ID范围内的所有TransactionNo

6 个答案:

答案 0 :(得分:2)

如果您的id序列中有间隔,并且您想要连续的序列用于生成的列,则可以使用row_number(),如下所示:

update t set trn=rn from
  (select trn,row_number()
   over (order by id) rn
   from t1
   where id>=1000 and id<=2000) t

Demo

答案 1 :(得分:1)

尝试如下

update table
 set TransactionNo=id-1000
  where id>1000 and id<=2000

Demo link

答案 2 :(得分:1)

我认为您正在寻找以下查询。

UPDATE table 
SET    transactionno = transactionno + 1 
WHERE  id >= 1000 
       AND id <= 2000 

答案 3 :(得分:0)

我认为您需要这个:

Intent.FLAG_RECEIVER_FOREGROUND

它保留update tablename set transactionno = (select transactionno from tablename where id = 1000) + id - 1000 where id > 1000 and id <= 2000 中的transactionno,并将其余的1从id = 1000增大到id = 1001
参见demo

或使用CTE:

id = 2000

请参见demo

答案 4 :(得分:0)

declare @startID = 1000
while(@startID <= 2000)
begin
   update table set TransactionNo = value where Id = @startID;
   set @StartID += 1;
end

答案 5 :(得分:0)

尝试一下:

UPDATE TableName
SET TransactionNo = Id
WHERE Id BETWEEN 1000 AND 2000

注意:您可以使用所需的任何值来更改此赋值语句(即= Id)。