Для полноты, вот скрипт, который вы можете использовать для тестирования:
USE Sandbox;
GO
CREATE TABLE test(ID int IDENTITY(1,1) PRIMARY KEY CLUSTERED, string char(1));
GO
INSERT INTO test (string)
VALUES ('a'),('b'),('c'),('d');
GO
SELECT *
FROM test;
GO
DELETE FROM test
WHERE string IN ('b','c');
GO
SELECT *
FROM test;
GO
DBCC CHECKIDENT ('dbo.test', RESEED, 1);
GO
INSERT INTO test (string)
VALUES ('e'),('f');
GO
SELECT *
FROM test;
GO
INSERT INTO test (string)
VALUES ('g');
GO
SELECT *
FROM test;
GO
DROP TABLE test;
Запуск этого скрипта даст вам ответ, который вам нужен.Если вы удивляетесь, почему я использовал 1
в качестве значения RESEED
, это объясняется в документации :
В следующем примере принудительное использование текущего значения идентификатора в AddressTypeIDстолбец в таблице AddressType со значением 10. Поскольку в таблице есть существующие строки, следующая вставленная строка будет использовать 11 в качестве значения, то есть новое текущее значение приращения, определенное для значения столбца, плюс 1.
В моем сценарии это означает, что следующая строка, которая будет вставлена после RESEED
, будет иметь значение 2
для его IDENTITY
, а не 1
(как строки, уже существующие в таблице (идентификаторы1
и 4
)).
Как уже отмечалось в комментариях, на самом деле нет необходимости использовать RESEED
для столбца IDENTITY
.Если вам нужно поддерживать последовательность, вы должны (что неудивительно) использовать SEQUENCE
: CREATE SEQUENCE
(Transact-SQL)