Вы здесь

Перенумерация индексного поля в SQL

tags: 

Столкнулся со своей же ошибкой. Формирование индекса было построенно некорретно и он быстро переполнился, не по количеству, а по значению. Записей в таблице было 200, однако ругался на переполнение вставляемого значения, т.к. он генерировался добавлением не 1, как числа, а "1" как строки к имеющейся.
Поиск по интернету для перенумерации готового решения не нашел, но навел меня на мысль.

Т.к. данная таблица нигде не участвовала, то связь с другими таблицами меня не волновала, но прописать обновление индекса в этих таблицах не составит большой проблемы. Задача состоит в том, чтобы найти последнее значение индекса, которое идет по порядку. В моем случае это было число 14.

DECLARE @ID NUMERIC(10)
DECLARE @CurID NUMERIC(10)
SET @CurID = 14 -- число, последнее правильное значение индекса
SELECT @ID = MIN(id) FROM tablename WHERE id > @CurID

while (NOT (@id IS NULL)) OR (@id > @CurID) BEGIN
  SET @CurID = @CurID + 1
  UPDATE tablename
    SET   id = @CurID
    WHERE id = @ID
  SELECT @ID = MIN(id) FROM tablename WHERE id > @CurID
END