Подтвердить что ты не робот

Значения столбцов идентификаторов сервера SQL начинаются с 0 вместо 1

У меня странная ситуация с некоторыми таблицами в моей базе данных, начиная с идентификаторов от 0, хотя TABLE CREATE имеет IDENTITY (1,1). Это так для некоторых таблиц, но не для других. Он работал до сегодняшнего дня.

Я попытался сбросить идентификационный столбец:

DBCC CHECKIDENT (SyncSession, reseed, 0);

Но новые записи начинаются с 0. Я попытался сделать это для всех таблиц, но некоторые из них все еще начинаются с 0, а некоторые - с 1.

Любые указатели?

(я использую SQL Server Express 2005 с расширенными службами)

4b9b3361

Ответ 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), затем удалить все строки из таблицы и снова поместить данные обратно в таблицу.