Sql server 2008 插入标识脚本

Sql server 2008 插入标识脚本,sql-server-2008,tsql,Sql Server 2008,Tsql,假设我有一个表,第一列是一个标识。我认为这个值自动增加了一倍。 假设我有这个专栏 1 2 3 4 ... 47 48 49 50 如果我删除最后一行(id=50)并插入新行,为什么标识是51而不是50 谢谢。标识种子不受删除的影响,因此下一个值将继续递增,就好像从未删除该行一样 也可以使用DBCC CHECKIDENT(http://msdn.microsoft.com/en-us/library/ms176057.aspx)实用工具。无论行是否存在,该值都将用完。除了删除,回滚插入时还将看

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

1 
2
3
4
...
47
48
49
50
如果我删除最后一行(id=50)并插入新行,为什么标识是51而不是50


谢谢。

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


也可以使用
DBCC CHECKIDENT
(http://msdn.microsoft.com/en-us/library/ms176057.aspx)实用工具。

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

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

DBCC CHECKIDENT (YourTable, NORESEED)

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

尝试调整间隙是一个非常糟糕的主意。如果操作不正确,很可能会导致数据完整性问题。没有理由担心99.99%的应用程序中存在漏洞(有少数应用程序的法律要求不允许存在漏洞,即不使用标识的应用程序)

值存储在哪里?在系统表中?@Love SQL Server本质上拥有一个值缓存,可以在内存中分配;当它耗尽这些,它得到更多。您可以使用IDENT_current()检索表的当前值,但请不要尝试使用此值来调整间隙。我是否可以将IDENTITY_INSERT table设置为启用以强制无间隙?这有什么意义?如果你不想有差距,首先就不要使用身份。你为什么关心差距?这些只是毫无意义的代理键,对吗?如果您出于某种原因关心间隙,请参见。@Love从不在一直运行的生产代码中使用SET IDENTITY\u INSERT TABLE ON,其目的是从另一个系统执行一次插入。只有dba才应该使用它。