我想更新表中所有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。
有什么建议为什么会发生以及如何避免?
答案 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;
我不知道这是否可以解决您的重复密钥问题,但是代码将运行得更快。