Как сбросить Identity в MS Sql

Если у Вас в таблице есть поле с автоинкрементном (Identity), то при удалении строк из таблицы нумерация все равно продолжается с последнего числа.

Есть несколько вариантов решения этой проблемы.


1. DBCC CHECKIDENT

Это самый простой вариант, просто устанавливаете желаемое значение. Будьте осторожны, не установите значение меньше, чем последнее.

DBCC CHECKIDENT (<table name>,RESEED,<new value>)

2. Удалить и добавить поле

Это более безопасный вариант т.к. новые значения присваиваются автоматически, но требует большего количества действий и меняет порядок столбцов.

ALTER TABLE <table name> DROP CONSTRAINT <constraint name>

ALTER TABLE <table name> DROP COLUMN <column name>

ALTER TABLE <table name> ADD <column name> bigint identity (1,1) NOT NULL

ALTER TABLE <table name> ADD CONSTRAINT <constraint name> PRIMARY KEY CLUSTERED(<column name> ASC)WITH (PAD_INDEX = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF) ON [PRIMARY]

3. Удалить и создать таблицу

Этот вариант устанавливает новое безопасное значение и сохраняет порядок колонок.

Создайте новую временную таблицу с такой же структурой, скопируйте все данные во временную таблицу, удалите старую таблицу и переименуйте временную.

Выбор подходящего варианта остается за вами.

Comments: 2

Анонимный
  
пригодилось первое
Анонимный
  
Первое удобнее всего. Но хотя бы пару раз на тестовой базе попробовать не мешает