在日常的sql server開發中,經常會用到Identity類型的識別欄位作為一個表結構的自增長編號。比如文章編號、記錄序號等等。自增長的識別欄位的引用很大程度上方便了資料庫程式的開發,但有時這個固執的欄位類型也會帶來一些麻煩。
一、修改識別欄位欄位值:
有時,為了實現某種功能,需要修改類型為Identity自增長類型的欄位的值,但由於識別欄位的類型所限,這種操作預設是不允許的。比如目前資料庫有5條正常添加的資料,此時刪除2條,那麼如果再添加資料時,自增長的識別欄位會自動賦值為6,可這時如果想在插入資料時給賦值3呢,預設是不允許的。如果您特別想改變這個欄位的值,完全由自己控制該識別欄位值的插入,方法還是有的,哈哈。
SET IDENTITY_INSERT [TABLE] [ON|OFF]
使用上述語句,可以方便的控制某個表的某個自增長識別欄位是否自動成長,也就是說是否允許你在insert一條記錄時手動指定識別欄位欄位的值。如果指定為on,則可以insert時指定識別欄位欄位的值,該值不自動成長賦值。當然,如果使用完畢,還需使用這個語句將開關關閉到預設狀態off,不然下次insert資料時該欄位還是不會自動成長賦值的,有始有終嘛。
如:
SET IDENTITY_INSERT [TABLE_NAME] ON
----------- INSERT SEG--------
SET IDENTITY_INSERT [TABLE_NAME] OFF
二、重設識別欄位欄位值:
當資料記錄被刪除一部分後,後面再添加的新資料記錄,識別欄位數值會有很大的空閑間隔,看上去是不是很不爽呢。即使你刪除表中全部記錄,identity識別欄位的值還是會無休止的自動增加變大,而不是從頭開始增長。通過下面這條語句可以重設自增長欄位的種子值:
DBCC CHECKIDENT(TABLE, [RESEED|NORESEED], 200)上述語句將把指定表的種子值強制重設為1。然而,如果你不想將種子重設為1,你可以用你想用的種子值替代第三個參數。如果你想知道當前的種子,而不是想重設識別值種子,這時你就要用NORESEED,而不用再去設定第三個參數。
如 DBCC CHECKIDENT(Product, RESEED, 210)