我們經常在sql server創建表,其中有個列都是設置自增列(id為主鍵,標識種子:1,標識增量:1)
但是今天不知道什么原因,今天新增、修改操作都報主鍵重復,由於我們這個表的自增的,所以不好檢查是新增到那個id值導致的。
sql server有內置函數方法,我們可以查詢某個表自增列自增到那個值
--查詢某個表自增列的最大標識值,語法如下 SELECT IDENT_CURRENT('TableName'); --查詢某個表自增類的標識值增量,語法如下: SELECT IDENT_INCR('TableName'); --查詢某個表自增列的下個標識值,語法如下: SELECT IDENT_CURRENT('TableName') + IDENT_INCR('TableName');
實際上使用將tableName替換成你自己新建的表名就可以(前提是該表已建立自增列),如下:
--查詢指定表(按鈕表)的自增列的下個標識值,語法如下: SELECT IDENT_CURRENT('ax_action') + IDENT_INCR('ax_action');
好了,我們查找到自增列下個標識值(23),跟數據表最大id值(228)進行比較,發現數據表存在id為23記錄,所有導致報主鍵重復問題
--查詢指定數據表的最新Uid select Max(id) from ax_action;
最后,我們要修改下,系統表內置函數下個標識值重置為329,如何做呢?
--重置指定表的自增列最大標識值,語法如下: dbcc checkident(tableName,reseed,maxVal);
將tableName替換成我們要修復數據表,maxVal替換成重置后的初始值,如下:
--重置指定表(按鈕表)的自增列最大標識值為329,語法如下: dbcc checkident(ax_action,reseed,328);
在調用系統內置函數獲取指定表自增列的下個標識值
--重置指定表(角色表)的自增列最大標識值為329,語法如下: dbcc checkident(ax_action,reseed,328); --查詢指定表(按鈕表)自增列的下一個標識值 SELECT IDENT_CURRENT('ax_action') + IDENT_INCR('ax_action');
最后,出現數據表id值與系統內置自增列最大標識值不一樣問題也找到了,就是數據表的數據是通過導入進來的(導入數據之前,把原先自增列的標識規范關掉了)
參考網站:
https://www.bbsmax.com/A/6pdDWPL5w3/
https://blog.csdn.net/wxw_317/article/details/7920591