我已经将记录插入到SQL Server数据库表中。该表有一个主键定义和自动增量身份设置为“是”。这主要是因为在SQL Azure中,每个表都必须定义一个主键和标识。
但是由于我不得不从表中删除一些记录,这些表的标识会受到干扰,索引列(自动生成的增量为1)会受到干扰。
在删除记录后,如何重置标识列,以便列的顺序按照升序排列?
该DBCC CHECKIDENT管理命令用来复位身份计数器。命令语法是:
DBCC CHECKIDENT (table_name [, { NORESEED | { RESEED [, new_reseed_value ]}}])
[ WITH NO_INFOMSGS ]
例:
DBCC CHECKIDENT ('[TestTable]', RESEED, 0);
GO
以前版本的Azure SQL数据库不支持此功能,但现在受支持。
请注意,根据文档,new_reseed_value参数在SQL Server版本中有所不同:
如果表中存在行,则使用new_reseed_value值插入下一行。在版本SQL Server 2008 R2和更早版本中,插入的下一行使用new_reseed_value +当前增量值。
但是,我发现这个信息误导(实际上只是错误),因为观察到的行为表明至少SQL Server 2012仍然使用new_reseed_value +当前增量值逻辑。微软甚至与自己Example C在同一页面上发现的矛盾:
C.迫使当前的身份价值达到一个新的价值
以下示例强制AddressType表中的AddressTypeID列中的当前标识值的值为10.由于该表具有现有行,因此插入的下一行将使用11作为该值,也就是定义的新的当前增量值列值加1。
USE AdventureWorks2012;
GO
DBCC CHECKIDENT ('Person.AddressType', RESEED, 10);
GO
尽管如此,所有这些都为更新的SQL Server版本留下了不同的行为选项。我想唯一的方法是确保,直到微软清理自己的文档中的东西,是使用前做实际测试