首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

DBCC CHECKIDENT:IDENTITY 欄位種子值檢查與重設完整指南

     編輯:關於SqlServer

指令語法

DBCC CHECKIDENT
( 'table_name'
  [ , { NORESEED
      | { RESEED [ , new_reseed_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 欄位不受影響
  • 生產環境操作前,務必完整備份
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
參數功能
table_name含 IDENTITY 欄位的資料表名稱
NORESEED僅回報目前種子值與欄位最大值,不修改
RESEED重設種子值:若目前值 < 最大值,設為最大值;否則不變
RESEED, new_value強制設定種子為指定值