2016-06-25 17 views
0

Я использую SQL Server 2012.Как решить проблему увеличения столбца Identity, когда нарушается внешняя связь?

У меня есть две таблицы, tblPerson и tblGender.

tblPerson 4 колонки

  • ID
  • Имя
  • Email
  • GenderID (иностранный ключ)

tblGender имеет 2 колонки

  • ID
  • Пол

tblGender имеет только две записи, мужского и женского пола, имеющего идентификатор 1 и 2.

Теперь, если я ввожу некорректные данные в столбец GenderId, как 3, 4 и т.д. он отклоняет значение, но увеличивает значение столбца Identity, и когда я вставляю другие данные, даже если он действителен, он дает следующий номер id.

Как я могу решить эту проблему?

+1

[Прекратить беспокоиться о пробелах «ИДЕНТИФИКАЦИИ») (http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/12/bad-habits-to-kick-expecting-identity-to-mean-something .aspx) - они действительно ** НЕ ** проблема! Поведение, которое вы видите, - это то, как работают столбцы идентичности - и нет простого способа «исправить» это - просто примите его и перейдите на –

+0

Если вы действительно хотите предотвратить это, вам необходимо ** подтвердить ** данные вставляются ** перед ** фактически вставляют их в таблицу, так что эта ситуация никогда не возникает –

+0

не используют ограничение идентификации, просто введите данные вручную в столбец идентификаторов, получив максимальный id и приращение с помощью одного –

ответ

0

Сначала, как уже было сказано, это нормальное поведение столбца IDENTITY. SQL Server сначала вставляет строку, увеличивает значение столбца Identity, но затем отклоняет эту строку из-за неудачного ограничения.

Советует быть забаненным:
1. Оставьте ваш столбец ID с пробелами. 2. Для очень последовательного номера «EmployeeID» вы можете использовать Sequence, который вы вставляете из переменной: https://msdn.microsoft.com/en-us/library/ff878058(v=sql.110).aspx Тогда у вас не должно быть пробелов в вашем «EmployeeID».

 Смежные вопросы

  • Нет связанных вопросов^_^