在while循环中更新表行

时间:2019-03-13 15:39:52

标签: sql sql-server-2008

我想更新表中所有ID行。所以我写了下面的查询,使用while循环更新它,如下所示-

get_context_data

但是在查询DECLARE @intFlag INT,@WhereCond INT SET @intFlag = 49990609 SET @WhereCond = 49973348 WHILE (@WhereCond <=50038355) BEGIN update stf_firm_fin_trans_backup set stf_fft_id = @intFlag where stf_fft_id = @WhereCond SET @intFlag = @intFlag + 1 SET @WhereCond = @WhereCond + 1 END GO 列上运行后,不知何故显示重复的记录。理想情况下,应该有重复的记录,因为stf_fft_id@intFlag在每次迭代中都增加1。

有什么建议为什么会发生以及如何避免?

1 个答案:

答案 0 :(得分:0)

您似乎想要这样的东西:

WITH toupdate as
      SELECT TOP (50038355 - 49973348) b.*, ROW_NUMBER() OVER (ORDER BY stf_fft_id) as seqnum
      FROM stf_firm_fin_trans_backup
      WHERE stf_fft_id >= 49973348
     )
UPDATE toupdate
    SET stf_fft_id = 49990609 + seqnum;

我不知道这是否可以解决您的重复密钥问题,但是代码将运行得更快。