Есть несколько вариантов решения этой проблемы.
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]
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. Удалить и создать таблицу
Этот вариант устанавливает новое безопасное значение и сохраняет порядок колонок.
Создайте новую временную таблицу с такой же структурой, скопируйте все данные во временную таблицу, удалите старую таблицу и переименуйте временную.
Выбор подходящего варианта остается за вами.
пригодилось первое
ОтветитьУдалитьПервое удобнее всего. Но хотя бы пару раз на тестовой базе попробовать не мешает
ОтветитьУдалить-- ПРОЦЕДУРА ДЛЯ УДАЛЕНИЯ КАТЕГОРИИ
ОтветитьУдалитьCREATE PROCEDURE CATEGORIA
@IDCATEGORIA INT
AS
DELETE CATEGORIA
WHERE IDCATEGORIA = @IDCATEGORIA
-- Обнуляем счетчик после удаления строки из таблицы
select @IDCATEGORIA=max([IDCATEGORIA])from [CATEGORIA]
if @IDCATEGORIA IS NULL
SET @IDCATEGORIA = 0
DBCC CHECKIDENT ('[CATEGORIA]', RESEED, @IDCATEGORIA)
вот мой вариант и не партесь....