Вставить данные в таблицу данных сервера SQL - PullRequest
0 голосов
/ 02 октября 2010

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

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

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

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

Ответы [ 2 ]

1 голос
/ 02 октября 2010

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

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

0 голосов
/ 02 октября 2010

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

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

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

...