加入收藏 | 设为首页 | 会员中心 | 我要投稿 源码门户网 (https://www.92codes.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

解决MSSQL2012重启后自动编号字段ID自动增加10000的问题

发布时间:2022-11-16 19:33:53 所属栏目:MsSql教程 来源:未知
导读: 我们在使用SQlServer2012数据库的时候,当数据库实例被重启后,表里的IDENTITY类型的字段,实际的跳转取决于该字段的类型,如果是INT类型,自动跳转为1000,如果是bigint,跳转为10000,从

我们在使用SQlServer2012数据库的时候,当数据库实例被重启后,表里的IDENTITY类型的字段,实际的跳转取决于该字段的类型,如果是INT类型,自动跳转为1000,如果是bigint,跳转为10000,从我们程序开发的角度,这个是无法接受的,目前只是在SQLServer2012种出现,其他版本的没有出现。

就在几天前重启mssql,我们的一个工程师声称,我们一个IDENTITY列的值直接增加了10000,本来应该是2200现在是12001,现在我们必须解决这个问题。

按照道理,每次跳转的值不应该改变,于是开始找原因,最后解决了该问题。

我们进行问题重现。

我们安装一台新的SQL Server 2012的测试服务器,并且创建一个测试数据库。然后创建一个包含IDENTITY列的表:

create table MyTestTable(Id int Identity(1,1), Name varchar(255));

现在插入两条数据:

insert into MyTestTable(Name) values ('Mr.Tom');

insert into MyTestTable(Name) values ('Mr.Jackson');

然后通过下面的查询语句得到

SELECT Id, Name FROM MyTestTable;

php连接mssql_重启mssql_mssql 在线管理

目前的结果没有问题,现在我们只需要重启SQLServer服务,现在我们从SQL Server Management Studio重启服务。

解决MSSQL2012重启后自动编号字段ID自动增加10000的问题

现在我们将向这个表继续插入两条数据。

insert into MyTestTable(Name) values ('Mr.Tom2');

insert into MyTestTable(Name) values ('Mr.Jackson2');

这个时候进行数据查询,结果就成这样了:

解决MSSQL2012重启后自动编号字段ID自动增加10000的问题

当SQLServer2012的服务重启后,则标识从1002开始,这意味着它跳了1000,如果将字段设置为bigint,它会条高10000。

怎么会这样呢,如何解决,难道是bug,但是在咨询后,微软声称这个不是bug,是一个新的功能,在某些情况下可以受益,但是对我们来说这个是不允许的,因为客户端如果看到这样的数据,肯定会觉得是一个问题,现在跳转的数量取决于服务重启的次数,如果这个值在客户端不被看到,到还好,如果被看到,那肯定需要处理。

解决方法有两个

1:使用序列

2:配置数据库实例的启动参数

1:使用序列

现在我们移除Identity字段,然后创建一个序列字段,并插入值。

CREATE SEQUENCE Id_Sequence

AS INT

START WITH 1

INCREMENT BY 1

MINVALUE 0

NO MAXVALUE

NO CACHE

2:修改数据库实例的启动参数

然后修改SQLServer启动参数,打开SQLServer configuration manager,然后选择服务实例,点击右键属性,查看实例的属性界面,然后启动参数选项输入-t272,然后保存数据后重启服务。这样就可以看到差别。

解决MSSQL2012重启后自动编号字段ID自动增加10000的问题

这两个方法都可以解决,但是第一种方法可以对某一个库进行解决,而第二个修改后,将影响整个数据库。

如果需要调整整个数据库,那么可以使用第二个解决方法。

(编辑:源码门户网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!