SQL Server中主键列上的标识

时间:2014-07-13 07:46:44

标签: sql-server-2012

我创建了一个Employee表,其中包含以下列和约束:

EmpId(Primary Key, Identity(1,1),not null)
EmpName
EmpJob
etc.

然后我尝试通过ADO.NET从aspx页面插入Employee值,遗憾的是它生成了EmpId Employee的错误序列,序列是

2 3 4 5 6 7 9 17 18.

我不知道为什么会这样,所以请帮助我。

1 个答案:

答案 0 :(得分:1)

身份不能保证序列中没有间隙。因此,它不应该被用于此。 取消/滚动支持的查询和/或删除的条目等情况将在序列中产生间隙。

身份用于提供一个独特的"基于当前种子的并发交易的id'值。 但它不保证没有差距(可以删除entires,可以回滚查询),多个事务的唯一性(种子可以更改)或类似。

如果你想拥有一个完整的整数序列,你必须在每次插入/更新/删除条目后自己维护它。 但总的来说 - 在大多数情况下都不需要这样的序列,因为在使用身份作为排序时(例如),你通常不会仅仅对排序/相对位置感兴趣。