我已经将记录插入到SQL Server数据库表中。该表定义了一个主键,并且自动递增标识种子被设置为“Yes”。这样做主要是因为在SQL Azure中,每个表都必须定义一个主键和标识。
但是由于我必须从表中删除一些记录,这些表的标识种子将受到干扰,索引列(自动生成的增量为1)也将受到干扰。
如何在删除记录后重置标识列,使该列具有升序数字顺序?
标识列在数据库中的任何地方都不能用作外键。
我已经将记录插入到SQL Server数据库表中。该表定义了一个主键,并且自动递增标识种子被设置为“Yes”。这样做主要是因为在SQL Azure中,每个表都必须定义一个主键和标识。
但是由于我必须从表中删除一些记录,这些表的标识种子将受到干扰,索引列(自动生成的增量为1)也将受到干扰。
如何在删除记录后重置标识列,使该列具有升序数字顺序?
标识列在数据库中的任何地方都不能用作外键。
当前回答
这是一个常见的问题,答案总是一样的:不要这样做。身份值应该被视为任意的,因此,没有“正确”的顺序。
其他回答
第一个:标识规范只是:“No”>>保存数据库执行项目
之后:身份规范只是:“是”>>保存数据库执行项目
您的数据库ID, PK从1 >>开始
虽然大多数答案都建议RESEED为0,而且有些人认为这是TRUNCATED表的缺陷,但微软有一个排除ID的解决方案
DBCC CHECKIDENT ('[TestTable]', RESEED)
这将检查表并重置到下一个ID。它从MS SQL 2005到现在都是可用的。
https://msdn.microsoft.com/en-us/library/ms176057.aspx
这是一个常见的问题,答案总是一样的:不要这样做。身份值应该被视为任意的,因此,没有“正确”的顺序。
用新id重置标识列
DECLARE @MAX INT
SELECT @MAX=ISNULL(MAX(Id),0) FROM [TestTable]
DBCC CHECKIDENT ('[TestTable]', RESEED,@MAX)
DBCC CHECKIDENT management命令用于重置标识计数器。命令格式为:
DBCC CHECKIDENT (table_name [, { NORESEED | { RESEED [, new_reseed_value ]}}])
[ WITH NO_INFOMSGS ]
例子:
DBCC CHECKIDENT ('[TestTable]', RESEED, 0);
GO
以前版本的Azure SQL数据库不支持,但现在支持了。
多亏了Solomon Rutzky,该命令的文档现在已经修复。