У меня есть таблица с первичным ключом, который является int, автоинкрементом с автоматическим номером. Стандартное поле типа первичного ключа.
Из-за сложного сценария с ранее реплицированной базой данных теперь у меня уже есть строки в таблице со значениями до 410000, но отчет о значениях из IDENT_CURRENT составляет всего 400060 или около того. Теперь у меня есть код, который пытается вставить записи и взрывается, потому что база данных считает, что она должна использовать номер 400060, и все же у меня уже есть запись с этим идентификатором. Кабум.
Я попытался вручную установить следующий номер в конструкторе таблиц, но при просмотре генерируемого им скрипта он создаст дублирующую таблицу, скопирует в нее все записи, отбросит старую таблицу, переименует ее, сделает кое-что с ограничения и т.д. Это все очень страшно, когда мне просто нужно простое изменение.
Есть ли обратный способ изменить это значение, при котором не будет так много ненужных изменений?
используйте следующее на вашем столе
dbcc checkident ('dbo.table', Reseed, 410000)
он изменяет текущее значение идентификатора на 410000, поэтому следующая вставка будет иметь значение icrement плюс 410000 (то есть 410001, если приращение равно 1).
Как насчет чего-то вроде следующего, которое удаляет только записи о нарушении, а затем повторно вставляет их из временной таблицы?
SELECT * INTO #temptable FROM tablename WHERE ID_FLD>400059;
DELETE * FROM tablename WHERE ID_FLD>400059;
SELECT * INTO tablename FROM #temptable;