В существующем приложении есть таблица User_Log с колонкой с последовательным идентификатором.
[id] [int] IDENTITY(1,1) NOT NULL
Однако при проверке таблицы я обнаружил, что в этой таблице строк 1.3M пропущено 16 874 пропущенных идентификатора.
При вставке строки в эту таблицу в какой момент назначается следующее значение идентификатора?
Идентификатор увеличивается, но данные не записываются, если триггер OnInsert завершается неудачей?
Какие еще ошибки могут привести к тому, что ни одна строка не будет записана, но ID увеличится?
Этот запрос показывает недостающие идентификаторы.
WITH Missing (miss_ID, maxid)
AS
(
SELECT 1 AS miss_ID, (select max(id) from user_log)
UNION ALL
SELECT miss_ID + 1, maxid FROM Missing
WHERE miss_ID < maxid
)
SELECT miss_ID
FROM Missing
LEFT OUTER JOIN user_log UL on UL.id = Missing.miss_ID
WHERE UL.id is NULL
OPTION (MAXRECURSION 0)
;
Я пытаюсь исключить удаление записей в журнале активности пользователей, это было бы плохо.
Спасибо за помощь в этом.