SQLServer數據庫自增長標識列的更新修改操作方法
在日常的sql server開發中,經常會用到Identity類型的標識列作為一個表結構的自增長編號。比如文章編號、記錄序號等等。自增長的標識列的引用很大程度上方便了數據庫程序的開發,但是有時這個固執的字段類型也會帶來一些麻煩。
一、修改標識列字段的值:(在執行insert時,將ID手動的設置成想要的值)
有時,為了實現某個功能,需要修改類型為Identity自增長類型的字段的值,但由於標識的類型所限,這種操作默認是不允許的。比如,目前數據庫有10條正常記錄,引時刪除5條,那么如果再添加數據時,自增長的標識列會自動賦值為11,可這時如果想在插入數據時給賦值6呢,默認是不允許的。如果說想改變主鍵標識符的值,完全由自已控制標識字段的插入,方法是有的,如下:
SET IDENTITY_INSERT [TABLE][ON|OFF]
使用上述語句,可以方便的控制某個表的某個自增長標識列是否自動增長,也就是說是否允許你在inert一條記錄時手動指定主鍵標識列字段的值。
如果指定為ON,則可以insert時指定主鍵標識字段的值,該值不自動增長。如果使用完畢,還需使用這個語句將開關關閉到默認狀態OFF,不然下次insert數據時該字段還是不會自動增長,要做到有始有終嘛。只是每次插入時都要手動的設置一個主鍵值,示列如下:
set identity_insert question_title on //開啟手動設置
insert into question_title (f_id,f_valid,f_questionTitle) values(6,5,'hello'); //手動的向數據庫插入數據
二、重置標識列字段值:
當數據記錄被刪除一部分后,后面再添加的新數據記錄,標識列數值會有很大的空閑間隔,看上去不是很爽。即使你刪除表中全部記錄,identity標識列的值還是會無何止的自動增加變大,而不是從頭開始增長。通過下面這條語句可以重置自增長字段的值:
DBCC CHECKIDENT(TABLE,[RESEED|NORESEED],[1])
上述語句把指定表的ID值(種子值)強制重設為1。然而,如果你不想將ID重設為1,你可以用你想用的ID值(種子值)替代第三個參數。如果你想知道當前的ID值(種子值),而不想重設標識種子,這時你就要用NORESEED,而不用再去設置第三個參數。
DBCC checkident(question_title,reseed,1)
insert into question_title (f_valid,f_questionTitle) values(5,'hello');
如果將表中記錄都刪除后,執行上面的一句話,這時ID的自增長值已被重設,再insert插入記錄到數據庫時,ID就可以從設置的1開始,以后每次插入的記錄還是自動增長。
執行成功后提示如下:
--檢查標識信息: 當前標識值 '9',當前列值 '1'。
DBCC 執行完畢。如果 DBCC 輸出了錯誤信息,請與系統管理員聯系。
說明:以上顯示數據庫某表中當前ID最大值為9,當前設置的ID值為1。
以上功能用得很少,我想也很少人知道吧。我上個星期幫一個朋友解決他做的一個網站的塊排序問題,他問我能不能用update修改主鍵的值,他用的是主鍵自增長,我想這肯定是不可能的,如果想改的話就不要將主鍵設置為自增長,而是每次增加的時間手動插入。於是他給我看了一篇關於自增長的文章,我總結出設置為自增長的主鍵ID是不能被update的。
但我發現一點如果刪除數據庫里的記錄,再次向數據庫插入數據時,ID還是從刪除的那條記錄后面開始記數的,ID能不能重新開始自增長呢,或是接原來的數據后面增長,比如我刪除了50~100記錄,我要再插入時ID為51而不是101,經過測試,是可以實現的,所以總結了上面的。