将IDENTITY转换为数据类型tinyint时出现算术溢出错误

7

我正在设计 SQL Server 2008 R2 SP2 Express 数据库中的表格。我创建了一个带有 nvarchar 列的表格用于数据和带有 tinyint 列用于自增身份假设行数不会超过几行 (这就是为什么我选择了0-255的tinyint)。当我添加超过 255 行时,即使在删除该表中的所有行并尝试添加一个新行后,此错误仍将持续发生。我使用 SQL Server Management Studio Express 进行操作。

  1. 如何强制数据库引擎检查哪些索引是空闲的?
  2. 如果我将 tinyint 更改为 int 并达到 int 数量的限制,这也会发生吗?

1
这是在使用IDENTITY列的范围用完时发生的错误 - 无论该列具有什么数据类型。然而:使用INT,您至少可以获得20亿个可能值 - 这应该比您现在已用完的255个更持久一些.... - marc_s
2个回答

11

如果您想要删除表中的所有行,但已经将增量列的计数器设置为255,则在添加255行后,需要删除所有行。即使删除了所有行,增量列的计数器仍然保持为255。

要解决这个问题,您需要在删除所有行后重置增量列的计数器。请在删除所有行时使用以下查询,以便计数器将重置为0。执行此查询后,您可以在表中添加行,并将增量列的值设置为1或表设计时设置的其他值。

DELETE FROM [TestTable]

DBCC CHECKIDENT ('[TestTable]', RESEED, 0)
GO

如果您想从表中删除所有行,您也可以使用truncate table命令。Truncate命令还将增量列重置为初始值。

Truncate Table [TestTable]

4

即使我删除了该表中的所有行,身份证的作用在于它将增加上次分配的值,而不管删除,因此一旦超过身份证类型的容量,该错误就是永久性的。

如果我将tinyint更改为int并达到int数字的限制,这也会发生吗?

是的,对于任何可能溢出的类型都会发生。

如何强制数据库引擎检查哪些索引是空闲的?

这有点违背身份证的目的,因为您将重复使用先前的值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接