Я предполагаю, что вы используете столбец идентификаторов:
ID INT NOT NULL IDENTITY(1,1)
Нет гарантии, что это останется в последовательности. Это было раздражающим, когда это сначала стало более очевидным (это, казалось, не случалось в более старых версиях SQL Server, но очевидно могло произойти), но также всегда было разработано. Пропуск стал очень очевидным, когда 2012 (?) Был выпущен. Я полагаю, вы должны использовать ПОСЛЕДОВАТЕЛЬНОСТЬ сейчас, если необходимо поддерживать постоянную последовательность - например, номера счетов:
https://dba.stackexchange.com/questions/62151/what-could-cause-an-auto-increment-primary-key-to-skip-numbers
https://docs.microsoft.com/en-us/sql/t-sql/statements/create-sequence-transact-sql?view=sql-server-ver15
Может также показаться, что вы пропускаете, если вы выполняете INSERT, и она терпит неудачу, но обычно это пропускает только 1. Это всегда происходило и задумано - вам нужно заново идентифицировать себя, чтобы преодолеть это. Что-то вроде:
DBCC CHECKIDENT ("dbo.MyTable", RESEED, 10)
Создаст следующий идентификационный номер 11. При условии, что другой пропуск также не произойдет.
РЕДАКТИРОВАТЬ: В отношении повторного выравнивания существующих записей я не DB Expert, но я сделал это на днях на столе, используя довольно элементарный подход - но это всего лишь маленький стол - возможно, есть лучший способ сделать это:
BEGIN TRAN
--CREATE TEMP TABLE
DECLARE @Tooltip TABLE
(
[TooltipId] INT NOT NULL,
[TooltipKey] NVARCHAR(100) NOT NULL,
[Name] NVARCHAR(255) NOT NULL
)
--INSERT EXISTING INTO TEMP TABLE
INSERT INTO @Tooltip (TooltipKey, Name )
SELECT TooltipKey, Name
FROM dbo.Tooltip
ORDER BY TooltipId
--CLEAR ACTUAL TABLE
TRUNCATE TABLE dbo.Tooltip
--RESET IDENTITY TO 1
DBCC CHECKIDENT ("dbo.Tooltip", RESEED, 1)
--REINSERT FROM TEMP TABLE INTO ACTUAL TABLE
INSERT INTO dbo.Tooltip (TooltipKey, Name )
SELECT TooltipKey, Name
FROM @Tooltip
ORDER BY TooltipId
--TEST OUTPUT
SELECT * FROM dbo.Tooltip
--DO THIS FOR TESTING
ROLLBACK TRAN
--DO THIS WHEN YOU'RE CERTAIN YOU WANT TO PERFORM THE ACTION
--COMMIT TRAN
Принимая во внимание, что если у вас есть внешние ключи или другие ссылки, усечение не будет работать, и вам придется делать что-то более сложное. Особенно, если у вас есть внешние ключи, ссылающиеся на ваши существующие неправильные идентификаторы