一、修改標(biāo)識(shí)列字段的值:(在執(zhí)行insert時(shí),將ID手動(dòng)的 設(shè)置成想要的值)
有時(shí),為了實(shí)現(xiàn)某個(gè)功能,需要修改類型為Identity自增長類型的字段的值,但由于標(biāo)識(shí)的類型所限,這種操作默認(rèn)是不允許的。比如,目前數(shù)據(jù)庫有10 條正常記錄,引時(shí)刪除5條,那么如果再添加數(shù)據(jù)時(shí),自增長的標(biāo)識(shí)列會(huì)自動(dòng)賦值為11,可這時(shí)如果想在插入數(shù)據(jù)時(shí)給賦值6呢,默認(rèn)是不允許的。如果說想改變 主鍵標(biāo)識(shí)符的值,完全由自已控制標(biāo)識(shí)字段的插入,方法是有的,如下:
SET IDENTITY_INSERT [TABLE][ON|OFF]
使 用上述語句,可以方便的控制某個(gè)表的某個(gè)自增長標(biāo)識(shí)列是否自動(dòng)增長,也就是說是否允許你在inert一條記錄時(shí)手動(dòng)指定主鍵標(biāo)識(shí)列字段的值。
如果指定為ON,則可以insert時(shí)指定主鍵標(biāo)識(shí)字段的值,該值不自動(dòng)增長。如果使用完畢,還需使用這個(gè)語句將開關(guān)關(guān)閉到默認(rèn)狀態(tài)OFF,不然下次 insert數(shù)據(jù)時(shí)該字段還是不會(huì)自動(dòng)增長,要做到有始有終嘛。只是每次插入時(shí)都要手動(dòng)的設(shè)置一個(gè)主鍵值,示列如下:
set identity_insert question_title on //開啟手動(dòng)設(shè)置
insert into question_title (f_id,f_valid,f_questionTitle) values(6,5,'hello'); //手動(dòng)的向數(shù)據(jù)庫插入數(shù)據(jù)
二、重置標(biāo)識(shí)列字段值:
當(dāng)數(shù)據(jù)記錄被刪除一部分后,后面再添加的新數(shù)據(jù)記錄,標(biāo)識(shí)列數(shù)值會(huì)有很大的空閑間隔,看上去不是很爽。即使你刪除表中全部記錄,identity標(biāo)識(shí)列的 值還是會(huì)無何止的自動(dòng)增加變大,而不是從頭開始增長。通過下面這條語句可以重置自增長字段的值:
DBCC CHECKIDENT(TABLE,[RESEED|NORESEED],[1])
上述語句把指定表的ID值(種子值)強(qiáng)制重設(shè)為1。然而,如果你不想將ID重設(shè)為1,你可以用你想用的ID值(種子值)替代第三個(gè)參數(shù)。如果你想知道當(dāng)前 的ID值(種子值),而不想重設(shè)標(biāo)識(shí)種子,這時(shí)你就要用NORESEED,而不用再去設(shè)置第三個(gè)參數(shù)。
DBCC checkident(question_title,reseed,1)
insert into question_title (f_valid,f_questionTitle) values(5,'hello');
如果將表中記錄都刪除后,執(zhí)行上面的一句話,這時(shí)ID的自增長值已被重設(shè),再insert插入記錄到數(shù)據(jù)庫時(shí),ID就可以從設(shè)置的1開始,以后每次插入的 記錄還是自動(dòng)增長。
執(zhí)行成功后提示如下:
--檢查標(biāo)識(shí)信息: 當(dāng)前標(biāo)識(shí)值 '9',當(dāng)前列值 '1'。
DBCC 執(zhí)行完畢。如果 DBCC 輸出了錯(cuò)誤信息,請與系統(tǒng)管理員聯(lián)系。
說明:以上顯示數(shù)據(jù)庫某表中當(dāng)前ID最大值為9,當(dāng)前設(shè)置的ID值為1。
聯(lián)系客服