2016-04-15 3 views
2

Я удалил некоторые записи из таблицы и хочу их повторно вставить из таблицы резервного копирования. Столбец первичного ключа - столбец идентификатора, и он имеет более крупные значения, чем удаленные. Когда я пытаюсь вставить его ошибку бросания. Я не могу переместить столбец. Пожалуйста, дайте мне знать, если это возможно на SQL-сервере.Вставьте меньше максимального значения в столбец идентичности на SQL-сервере

+0

это определенно возможно. опубликовать некоторые из ваших SQL и ошибки, которые вы получаете. –

+0

Я не думаю, что вы можете пересчитать значение меньше существующего максимума, и даже если бы вы могли это сделать, это не было бы хорошей идеей. Используйте IDENTITY_INSERT, как в ответе от igor. – Paparazzi

ответ

2

Прежде чем это сделать, убедитесь, что в эту таблицу нет других процессов, или они могут получить сообщение об ошибке при отключении IDENTITY. Альтернативно оберните все это в transaction with the isolation level, установленном на SERIALIZABLE, чтобы предотвратить любые одновременные изменения, происходящие из других процессов.

  1. Отключить IDENTITY на вашем столе/столбе.
  2. Выполняйте свои инструкции INSERT из своей резервной копии, убедитесь, что вы указали значение столбца, который был вашим столбцом IDENTITY.
  3. Повторно включите IDENTITY на стол/столбец.

Sql:

SET IDENTITY_INSERT <your_table> OFF 
-- Exceute Inserts 
SET IDENTITY_INSERT <your_table> ON 

Примечания

Вы должны, вероятно, выполнить свои вставки, завернутые в транзакции. Таким образом, вы можете откатить все, если произойдет сбой. У вас также не должно быть конфликтов, поскольку идентификатор всегда увеличивается, поэтому повторное добавление удаленных записей не должно создавать проблем. Возможно, вам захочется проверить фрагментацию индекса, хотя на ПК после этого.

Смежные вопросы