Обновление строк таблицы в цикле while - PullRequest
0 голосов
/ 13 марта 2019

Я хочу обновить все строки идентификаторов в таблице. Итак, я написал запрос ниже, чтобы обновить его, используя цикл while, как показано ниже -

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 и @WhereCond увеличивается на 1 в каждой итерации.

Есть предположения, почему это происходит и как этого избежать?

1 Ответ

0 голосов
/ 13 марта 2019

Вы, кажется, хотите что-то вроде этого:

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;

Я не знаю, решит ли это проблему с дублирующимся ключом, но код будет работать быстрее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...