在SQLServer輸入數據時,碰到有主鍵ID需要維護時,可使用IDENT_CURRENT和CHECKIDENT命令來維護。
IDENT_CURRENT命令返回指定表或視圖生成的最后一個標識值。用法如下:
IDENT_CURRENT('table_name')
返回類型numeric(38,0).
DBCC CHECKIDENT命令用於檢查或指定當前表/視圖的標識值。用法如下:
DBCC CHECKIDENT
(
table_name
[, {NORESEED | {RESEED [, new_reseed_value] } } ]
)
[WITH NO_INFOSGS]
一般我們的用法如下:
1) 查看且如有必要更正當前標識值:
DBCC CHECKIDENT('table_name')
2) 查看當前標識值,即使有錯也不視圖更正:
DBCC CHECKIDENT('table_name', NORESEED)
3) 指定新的標識值:
DBCC CHECKIDENT('table_name', RESEED, new_reseed_value)
WITH NO_INFOSGS是關閉消息提示。
--------------------------------------------------
需要注意的問題:
當設置的new_reseed_value小於表中主鍵ID的值時,后續再插入過程中會出現以下錯誤:
a) 當主鍵或唯一約束存在時,會報2627錯誤,因為當前的主鍵值已在數據表中,產生沖突;
b) 當主鍵或唯一約束不存在時,會報重復主鍵錯誤。
解決方法:
先使用select max(id) from table_name, 查詢出表中最大的ID,然后重新設置一個比其打的new_reseed_value;
如果表中數據已經刪除,可以使用DBCC CHECKIDENT('table_name', NORESEED, 1)置為1,然后用DBCC CHECKIDEN('table_name')來修正。
另外,在SQL中,如果要插入ID,一般我們可以用select IDENT_CURRENT('table_name')+1 來插入比當前序列值多1的值。