插入标识脚本

时间:2012-06-29 17:31:03

标签: sql-server-2008 tsql

假设我有一个表,第一列是一个标识。我认为价值增加了​​一个自动化。 我说这个专栏是

1 
2
3
4
...
47
48
49
50

如果我删除最后一行(id = 50)并插入一个新行,为什么身份是51而不是50?

感谢。

4 个答案:

答案 0 :(得分:1)

无论行是否存在,该值都将用完。除了删除之外,还会在回滚插入时看到间隙。如果你想要一个连续的整数序列,那么身份就不是答案。

答案 1 :(得分:0)

标识种子不受删除的影响,因此下一个值将继续递增,就像从未删除该行一样。

使用DBCC CHECKIDENT(http://msdn.microsoft.com/en-us/library/ms176057.aspx)实用程序也可以重新定位身份。

答案 2 :(得分:0)

种子与记录分开跟踪;如果删除记录,则仍使用该值。你可以使用

DBCC CHECKIDENT (YourTable, NORESEED)

验证下一个标识值是什么。

答案 3 :(得分:0)

尝试调整差距是一个非常糟糕的主意。如果您没有正确执行此操作,则极有可能最终导致数据完整性问题。没有理由关心99.99%的所有申请中存在差距(有少数申请的法律要求不允许存在差距 - 那些不使用身份的申请)。