| 參數 | 功能 |
table_name | 含 IDENTITY 欄位的資料表名稱 |
NORESEED | 僅回報目前種子值與欄位最大值,不修改 |
RESEED | 重設種子值:若目前值 < 最大值,設為最大值;否則不變 |
RESEED, new_value | 強制設定種子為指定值 |
行為細節
- 若資料表有主鍵/唯一鍵,種子值錯誤可能導致 錯誤 2627 (重複鍵)
- 含
NOT FOR REPLICATION 的 IDENTITY 欄位不會被自動更正
- 種子值可大於表中最大值(如大量刪除後),
RESEED 不會自動降低,需手動指定較小值再執行 RESEED 讓系統自動調整
- 若
new_reseed_value < 表中最大值,後續插入將拋出 2627 錯誤
常用操作範例
A. 僅檢查回報(不修改)
DBCC CHECKIDENT ('jobs', NORESEED)
-- 回報:Checking identity information: current identity value '14', current column value '14'.
B. 必要時自動重設(補齊缺口)
DBCC CHECKIDENT ('jobs') -- 等同 RESEED
-- 若目前種子 10 < 表中最大 14 → 重設為 14
C. 強制指定種子值(如重設為 30)
DBCC CHECKIDENT ('jobs', RESEED, 30)
-- 下一筆插入將使用 31(若表為空則用 30)
D. 種子值過大時的修正雙步驟
-- 步驟 1:查出目前最大值
DBCC CHECKIDENT ('jobs', NORESEED)
-- 假設回報 current identity value '1000', current column value '50'
-- 步驟 2:先設極小值,再讓系統自動校正
DBCC CHECKIDENT ('jobs', RESEED, 1)
DBCC CHECKIDENT ('jobs', RESEED)
-- 系統偵測最大值 50 > 種子 1 → 自動重設為 50
權限需求
- 資料表擁有者
sysadmin 固定伺服器角色
db_owner 固定資料庫角色
不可轉授權限。
實務建議
- 資料移轉/匯入後,必須執行
CHECKIDENT 校正種子
- 大量刪除資料後,考慮重設種子避免整數溢位(INT 上限 21 億)
- 複寫環境謹慎使用,
NOT FOR REPLICATION 欄位不受影響
- 生產環境操作前,務必完整備份
- 上一篇文章: 使用預存程序模擬 IDENTITY(100,1) 自動遞增邏輯
- 下一篇文章: SQL Server 記憶體配置建議:預留作業系統 20MB,其餘給資料庫引擎
Copyright ©
程式碼之家 All Rights Reserved