У меня есть таблица SqlServer 2008, которая имеет первичный ключ (IsIdentity = Yes) и три других поля, которые составляют ограничение уникального ключа.
Кроме того, у меня есть процедура сохранения, которая вставляет запись в таблицу, и я вызываю sproc через C #, используя объект SqlConnection.
Вызов C # sproc работает нормально, однако я заметил интересные результаты, когда вызов C # sproc нарушает ограничение уникального ключа ....
Когда вызов sproc нарушает ограничение уникального ключа, создается исключение SqlException - что неудивительно и круто. Тем не менее, я заметил, что следующая запись, которая успешно добавлена в таблицу, имеет значение PK, которое точно не на одну единицу больше, чем предыдущая запись -
Например: скажем, в таблице пять записей, где значения PK равны 1,2,3,4 и 5. Sproc пытается вставить шестую запись, но ограничение уникального ключа нарушено и, таким образом, шестая запись не вставлена. Затем sproc пытается вставить другую запись, и на этот раз она успешна. - Эта новая запись имеет значение PK 7 вместо 6.
Это нормальное поведение? Если да, можете ли вы дать мне причину, почему это так? (Если запись не может быть вставлена, почему индекс PK увеличивается?)
Если это не нормальное поведение, можете ли вы дать мне какие-либо подсказки относительно того, почему я вижу эти симптомы?