Вы здесь

Перенумерация индексного поля в 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