Значения столбцов идентификаторов сервера SQL начинаются с 0 вместо 1
У меня странная ситуация с некоторыми таблицами в моей базе данных, начиная с идентификаторов от 0, хотя TABLE CREATE имеет IDENTITY (1,1).
Это так для некоторых таблиц, но не для других.
Он работал до сегодняшнего дня.
Я попытался сбросить идентификационный столбец:
DBCC CHECKIDENT (SyncSession, reseed, 0);
Но новые записи начинаются с 0.
Я попытался сделать это для всех таблиц, но некоторые из них все еще начинаются с 0, а некоторые - с 1.
Любые указатели?
(я использую SQL Server Express 2005 с расширенными службами)
Ответы
Ответ 1
Из DBCC CHECKIDENT
DBCC CHECKIDENT ( table_name, RESEED, new_reseed_value )
Если никакие строки не были вставлены в таблицы с момента ее создания или всего строки были удалены с помощью Задание TRUNCATE TABLE, первое строка, вставленная после запуска DBCC CHECKIDENT использует new_reseed_value как личность. В противном случае следующая строка вставляется new_reseed_value + текущее значение приращения.
Итак, это ожидается для пустой или усеченной таблицы.
Ответ 2
Если вы передадите значение reseed, DB начнет идентификацию с этого нового значения:
DBCC CHECKIDENT (SyncSession, RESEED, 0); --next record should be 0 + increment
Вам не нужно передавать значение, но если вы не используете IDENTITY(a,b)
:
DBCC CHECKIDENT (SyncSession, RESEED); --next record should be the seed value 'a'
Это обычно лучше, так как он приближает таблицу к ее начальному состоянию.
Ответ 3
Это логично, так как вы изменили (reseeded) значение идентификатора до нуля?
DBCC CHECKIDENT (SyncSession, reseed, 1)
будет обновлен ваш столбец идентификаторов и убедитесь, что первая новая запись начнется с 1.
Ответ 4
У меня такая же проблема, восстановление из резервной копии после изменения БД. Я просто добавляю фиктивную запись, а затем удаляю ее... затем устанавливаю RESEED в 0. Кажется, работает.
Ответ 5
Попробуйте это
DECLARE @c TABLE (TanvtechId varchar(10),NewTanvtechId Varchar(10))
INSERT INTO @c
SELECT TanvtechId , Row_Number() OVER (ORDER BY TanvtechId ) from Tanvtech
UPDATE G
SET G.TanvtechId =a.NewTanvtechId
FROM Tanvtech as G INNER JOIN @c as a ON a.TanvtechId =G.TanvtechId
Ответ 6
DBCC CHECKIDENT ( Table_Name, RESEED, 0 )
Это способ запуска id
с Zero(0)
, затем удалить все строки из таблицы и снова поместить данные обратно в таблицу.