Вставить данные в таблицу данных sql server

У меня есть одна таблица с именем customer_master, которая включает столбец с именем cust_id с автоинкрементом, установленным на 1.

Когда мы пытаемся вставить записи, он работает нормально и вставленные записи типа cust_id 1, 2, 3 и 4 вставляются, но когда в команде вставки генерируется ошибка, мы выполняем откат транзакции, это означает, что cust_id 5 не вставляется, а когда мы вставляем другую запись, cust_id генерирует 6. Он пропускает cust_id 5.

Я хочу настроить его так, чтобы при возникновении какой-либо ошибки в команде вставки идентификатор не увеличивался.

Мы используем C # и sql server 2005.


person jai    schedule 02.10.2010    source источник


Ответы (2)


Причина, по которой SQL Server делает это, - эффективность. Если вам нужен порядковый номер без пробелов, вы не должны использовать identity, вам нужно будет реализовать свою собственную схему, в которой параллельные транзакции блокируются в ожидании следующего значения на случай, если начальная транзакция откатится.

Второй запрос здесь может быть использован для этой цели . Но действительно ли вам это нужно? Если это чисто из эстетических соображений, мой совет - не беспокойтесь об этом!

person Martin Smith    schedule 02.10.2010

Вы можете использовать DBCC CHECKIDENT для повторного заполнения столбца идентификаторов после ошибки вставки.

DBCC CHECKIDENT (table_name, NORESEED) возвращает текущее значение идентификатора и текущее максимальное значение столбца идентификатора.

DBCC CHECKIDENT (table_name, RESEED, new_reseed_value) устанавливает текущее значение идентификатора равным new_reseed_value.

person HTTP 410    schedule 02.10.2010