Значения столбца идентификатора сервера SQL начинаются с 0 вместо 1 - PullRequest
38 голосов
/ 07 апреля 2009

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

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

DBCC CHECKIDENT (SyncSession, reseed, 0);

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

Есть указатели?

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

Ответы [ 6 ]

44 голосов
/ 07 апреля 2009

С Проверка подлинности DBCC

DBCC CHECKIDENT ( table_name, RESEED, new_reseed_value )

Если строки не были вставлены в таблица с момента ее создания или все строки были удалены с помощью Оператор TRUNCATE TABLE, первый строка вставлена ​​после запуска DBCC CHECKIDENT использует new_reseed_value как личность. В противном случае следующий ряд вставлено использует new_reseed_value + текущее значение приращения.

Итак, это ожидается для пустой или усеченной таблицы.

4 голосов
/ 05 марта 2014

Если вы передадите новое значение, БД начнет идентификацию с этого нового значения:

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'

Обычно это более эффективная практика, поскольку таблица ближе к первоначальному созданному состоянию.

2 голосов
/ 30 сентября 2010

У меня такая же проблема, восстановление из резервной копии после изменения БД. Я просто добавляю фиктивную запись и затем удаляю ее ... затем устанавливаю RESEED на 0. Кажется, что работает.

2 голосов
/ 07 апреля 2009

Это логично, поскольку вы изменили (заново) значение идентификатора на ноль?

DBCC CHECKIDENT (SyncSession, reseed, 1)

повторно заполнит ваш столбец идентификаторов и убедитесь, что первая новая запись начнется с 1.

1 голос
/ 20 июня 2011

Попробуйте это

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 
0 голосов
/ 26 мая 2016
DBCC CHECKIDENT ( Table_Name, RESEED, 0 )

Это способ начать id с Zero(0), затем удалить все строки из таблицы и снова поместить данные обратно в таблицу.

...