我有一个表,每执行一次相应的功能就会删除约7000多行的数据,然后又插入约7000多行的数据,id列是自动编号,由于删除了行,自动编号是接着最后的id号往下编,因此浪费了很多自动编号,我胆心时间长了自动编号会用完,请问自动编号的下限是多少.如果超过了会怎么办?会超过吗.

解决方案 »

  1.   

    int的范围有多大,它就有多大,你担心不够的话,可以用bigint
      

  2.   


    数据类型为 integer 或 bigint 的列上创建 IDENTITY 
    bigint 
     -2^63 (-9,223,372,036,854,775,808) 到 2^63-1 (9,223,372,036,854,775,807)
     8 字节
     
    int 
     -2^31 (-2,147,483,648) 到 2^31-1 (2,147,483,647)
     4 字节
    7000删除一次的话, int 也有306783次可以用
                       bigint  1317624576693539次可用算算看? 
      

  3.   

    应该不会
    确实不放心的话,可以改用newid() 作为唯一标识
      

  4.   

    declare @tmp table(id tinyint identity(1,1),aa char(10) default 'aa')
    set nocount on
    declare @i int
    set @i=1
    while @i<300
    begin
    insert into @tmp (aa) values ('ab')

    set @i=@i+1
    end
    select * from @tmp
    消息 8115,级别 16,状态 1,第 7 行
    将 IDENTITY 转换为数据类型 tinyint 时出现算术溢出错误。
    发生算术溢出。
      

  5.   

    试算一下用bigint,只用正数的话如果每秒用掉1000个可用30亿年
      

  6.   

    怕用完,如果是全部删除数据时可以用truncate
      

  7.   

    int 最大值为2147483647,如果到达最大值,再插入的话就会溢出