背景:

用identity修饰列可以使它自动增长

例了:

create table T(ID int not null identity(1,1),
      Data nvarchar(32));

插入数据

declare @i as int =1;
     while(@i<10)
     begin
           insert into T values(replicate(cast(@i as nchar(1)),10))
           set @i = @i +1;
    end

SQL Server identity种子-LMLPHP

用dbcc checkident('Table_Name'); 查看表的种子值。

SQL Server identity种子-LMLPHP

删除数据:

delete from T
                    where ID >1;
                    go

dbcc checkident('Table_Name');--这时种子值还是9

再次插入数据:

insert into T(Data) values('AAAA');

查看数据:

SQL Server identity种子-LMLPHP

解决方法、

重设种子值:

dbcc checkident('T',reseed,2);-- 到这一步问题就已经解决了

插入数据:

insert into T(Data) values('BBB');

输出:

select * fom T;

SQL Server identity种子-LMLPHP

重点:

这个种子值是  2  而表是有一个值是 10 如果一直长下去,会发生什么事呢?让我们多插入几条数据看一下

插入数据:

declare @i as int =1;
                 while(@i<10)
                 begin
                         insert into T values(replicate('NNN',10))
                         set @i = @i +1;
                 end

输出:

SQL Server identity种子-LMLPHP

重点2、

如果ID是主键什么办。

会报错插入会失败。

SQL Server identity种子-LMLPHP

05-08 08:39