我有一个 SqlServer 2008 表,它有一个主键 (IsIdentity=Yes) 和其他三个构成唯一键约束的字段。
此外,我有一个将记录插入表的存储过程,并且我使用 SqlConnection 对象通过 C# 调用存储过程。
C# sproc 调用工作正常,但是当 C# sproc 调用违反唯一键约束时,我注意到有趣的结果......
当 sproc 调用违反唯一键约束时,会抛出 SqlException - 这并不奇怪而且很酷。但是,我注意到成功添加到表中的下一条记录的 PK 值并不比上一条记录多一个 -
例如:假设表有 5 条记录,PK 值为 1,2,3,4 和 5。sproc 尝试插入第六条记录,但违反了唯一键约束,因此,第六条记录没有插入。然后 sproc 尝试插入另一条记录,这次它成功了。- 这条新记录的 PK 值为 7 而不是 6。
这是正常行为吗?如果是这样,你能告诉我为什么会这样吗?(如果一条记录插入失败,为什么PK索引会增加?)
如果这不是正常行为,您能告诉我为什么我会看到这些症状吗?