У меня есть таблица с столбцом идентификатора первичного ключа и устанавливается для увеличения 1 для каждой новой записи, довольно стандартной конфигурации. Эта таблица регулярно обновляется новыми записями и архивируется один раз в месяц в архивной таблице, а затем усекается.Идентификация столбца столбца SQL Server Нумерация
При нормальной работе следующая запись, попадающая в таблицу после усечения, будет иметь значение следующего идентификатора, гарантируя, что в таблице ID и таблице «жить» нет совпадений в идентификаторах.
Из-за неизвестных факторов, как-то столбец Идентификатор в живой таблице «вернул» обратно к идентификатору, который уже использовался. Поскольку эта база данных была разработана плохо, теперь у меня есть некоторые проблемы с целостностью данных.
Мое решение проблемы заключается в обновлении столбца идентификатора для всех записей в «живой» таблице, чтобы не было совпадений с идентификаторами, которые существуют в таблице «архив». Как только я обновляю идентификаторы, я обновлю столбец Identity, чтобы будущие записи также не перекрывались.
Мой вопрос не в том, чтобы переместить столбец (используя DBCC - я знаю, как это сделать), но и о том, как переделать существующие записи с новыми значениями ID. Должен ли я делать это с помощью циклического динамического SQL-запроса (удалить запись, вставить запись) или есть какая-то функция SQL Server, о которой я не знаю, что может автоматически перенумеровать столбец идентификатора?
Не знаю, почему вы нужен цикл или динамический SQL. 'НАЧАТЬ ПЕРЕВОД; DECLARE @i INT; SELECT @i = MAX (id) FROM dbo.table WITH (HOLDLOCK); INSERT dbo.table (othercols) SELECT othercols FROM dbo.table; DELETE dbo.table WHERE id <= @i; COMMIT TRANSACTION; ' –
Это тот тип ответа, который я искал, спасибо! Я знаю, что он не нужен dyn SQL обязательно, просто не мог придумать умный способ сделать это. Если вы поместите это в ответ вместо комментария, я отмечу его «принято». – LegendaryDude