我正在设计SQL Server 2008 R2 SP2 Express数据库中的表。我为数据创建了nvarchar
列的表,为自动递增标识创建了tinyint
列,假设行数不会超过几行(这就是为什么我选择0-255 tinyint
)。当我添加超过255行时,即使在删除该表中的所有行并尝试添加一个新行之后,此错误仍会永久发生。我正在使用SQL Server Management Studio Express执行此操作。
tinyint
更改为int
并达到int
数字的限制,会发生这种情况吗?答案 0 :(得分:9)
添加255行后,想要删除表中的所有行,但增量列的计数器已经设置为255,即使删除了所有行。
要解决此问题,您需要在删除所有行后重置增量列的计数器。删除所有行时请使用以下查询,以便计数器将重置为重置为0.执行此查询后,您可以在表中添加增量列值为1或在表设计时设置的行。
DELETE FROM [TestTable]
DBCC CHECKIDENT ('[TestTable]', RESEED, 0)
GO
如果要删除表中的所有行,也可以使用truncate table命令。截断命令还将增量列重置为初始值。
Truncate Table [TestTable]
答案 1 :(得分:4)
...即使我删除了该表中的所有行
标识的一点是,它将增加最后指定的值,而不管删除是什么,因此只要超过标识类型的容量,该错误就是永久性的。
如果我将tinyint更改为int并达到int number的限制,是否会发生这种情况?
是的,任何可能溢出的类型都会发生。
如何强制数据库引擎检查哪些索引是免费的?
这会破坏身份的目的,因为您将重复使用以前的值。