亚洲国产精品欧美综合|婷婷五月无码中文有码|欧美系列国产一区二区|美女AV一区二区三区

查看詳情

解決MSSQL2012重啟后自動編號字段ID自動增加10000的問題

我們在使用SQlServer2012數據庫的時候,當數據庫實例被重啟后,表里的IDENTITY類型的字段,實際的跳轉取決于該字段的類型,如果是INT類型,自動跳轉為1000,如果是bigint,跳轉為10000,從我們程序開發的角度,這個是無法接受的,目前只是在SQLServer2012種出現,其他版本的沒有出現。

就在幾天前,我們的一個工程師聲稱,我們一個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;


目前的結果沒有問題,現在我們只需要重啟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的問題
 這兩個方法都可以解決,但是第一種方法可以對某一個庫進行解決,而第二個修改后,將影響整個數據庫。
 如果需要調整整個數據庫,那么可以使用第二個解決方法。


原創內容,轉載請注明出處:網站建設,APP開發,小程序開發請找江西居道科技有限公司,http://xhjnt.cn

智能建站系統代理招商
所屬分類:文章中心??????Time:2016-03-06 06:54:00??????人氣:2628
關閉
13517086454