当种子从最大负值开始时,SQL table 中的最大行数,其中 PK 是 INT 32?

Max rows in SQL table where PK is INT 32 when seed starts at max negative value?

是 SQL 服务器中的最大行数 table 其中主键标识为 INT 32 类型:

4,294,967,294

i.e 2,147,483,647 positive numbers add 2,147,483,647 negative numbers

我问的原因是系统注定要使用所有 2,147,483,647 个号码。

成功将种子重置为-2,147,483,647个月前的负数。

还实现了一个 Agent 任务来删除未使用的正数。

Table 每天 PK ID 的计数检查报告 table 中的行数非常接近 2,147,483,647,但迄今为止尚未突破。

Sat 28 / 2,125,167,844

Fri 27 / 2,128,445,105

Thur 26 / 2,128,704,866

Wed 25 / 2,128,935,436

Sat 21 / 2,141,016,422

Thur 19 / 2,143,413,531

理论上,如果使用中的所有正面和负面标识都正确,此行数应该达到 4,294,967,294?

奇怪的是这个计数从来没有大于最大正值。下面的查询是一个简单的行数,+/- 标识不重要。

select COUNT (id) from table with (NOLOCK)

谢谢

是的,您可以再次一直到身份 0,并且您可以在 table 中保留 4,294,967,294 条记录。但是你说你是 "removing unused positive numbers" 如果这个过程总是先删除最旧的记录那么它应该会带来很多麻烦。如果您要删除随机数据,请不要指望这些数字会自动被身份使用。当插入标识列时 SQL 服务器会记住最后插入的标识并将其递增 1 然后执行插入,如果数字存在,如果该列上有唯一键,它将给出键冲突错误。

PS:有更快的方法来计算 table 中的所有行:

SELECT SUM (row_count)
FROM sys.dm_db_partition_stats
WHERE object_id=OBJECT_ID('Transactions')   
AND (index_id=0 or index_id=1);

PS2:确保将计数结果放入 bigint 中;)