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

时间:2015-02-28 08:48:20

标签: sql-server tsql

SQL Server表中主键标识为INT 32类型的最大行数:

  

4294967294

     

即2,147,483,647个正数加上2,147,483,647个负数

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

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

还实施了代理任务以删除未使用的正数。

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

  

星期六28 / 2,125,167,844

     

星期五27 / 2,128,445,105

     

Thur 26 / 2,128,704,866

     

周五25 / 2,128,935,436

     

星期六21 / 2,141,016,422

     

Thur 19 / 2,143,413,531

理论上,如果使用中的所有正面和负面身份都正确,那么这个行数应达到4,294,967,294?

奇怪的是,这个计数从未大于最大正值。下面的查询是一个简单的行计数,+ / - 身份无关紧要。

  

使用(NOLOCK)

从表中选择COUNT(id)

由于

1 个答案:

答案 0 :(得分:1)

是的,你可以再一次识别0,你可以在你的桌子上拿到4,294,967,294条记录。但是你说你已经删除了未使用的正数"如果这个过程总是先删除最旧的记录,那么应该给它带来很多麻烦。如果您要删除随机数据,请不要期望这些数字会被身份自动使用。当插入标识列时,SQL Server会记住最后插入的标识并将其递增1然后执行插入操作,如果该数字存在,则如果该列上有唯一键,则会发出密钥违例错误。

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

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中;)