DBCC CHECKIDENT (Transact-SQL)

更新: 2008 年 11 月 17 日

檢查指定資料表目前的識別值,必要的話,會變更識別值。您也可以使用 DBCC CHECKIDENT,針對識別欄位手動設定新的目前識別值。

主題連結圖示Transact-SQL 語法慣例

語法

DBCC CHECKIDENT 
( 
        table_name
        [ , { NORESEED | { RESEED [ , new_reseed_value ] } } ]
)
[ WITH NO_INFOMSGS ]

引數

  • table_name
    這是要檢查目前識別值之資料表的名稱。指定的資料表必須包含識別欄位。資料表名稱必須符合識別碼的規則。
  • NORESEED
    指定不應變更目前的識別值。
  • RESEED
    指定應變更目前的識別值。
  • new_reseed_value
    這是要當做識別欄位目前值使用的新值。
  • WITH NO_INFOMSGS
    抑制所有參考訊息。

結果集

不論是否指定任何這些選項 (針對包含識別欄位的資料表),DBCC CHECKIDENT 都會傳回 (值可能會不同):

Checking identity information: current identity value '290', current column value '290'.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

變更初始值

初始值是指針對載入資料表的第一個資料列插入識別欄位的值。所有後續的資料列都會包含目前的識別值加上遞增值,其中目前的識別值就是針對資料表或檢視表所產生的最後一個識別值。如需詳細資訊,請參閱<建立與修改識別碼資料行>。

您無法使用 DBCC CHECKIDENT 來執行下列工作:

  • 變更建立資料表或檢視表時針對識別欄位所指定的原始初始值。
  • 重設資料表或檢視表中現有資料列的初始值。

若要變更原始初始值並重設任何現有資料列的初始值,您必須卸除識別欄位,然後重新建立此識別欄位並指定新的初始值。當資料表包含資料時,識別碼就會加入至具有指定之初始和遞增值的現有資料列。但是,無法保證更新資料列的順序。

備註

目前識別值的特定更正會隨著參數規格而不同。

DBCC CHECKIDENT 命令 進行的識別更正

DBCC CHECKIDENT ( table_name, NORESEED )

不重設目前的識別值。DBCC CHECKIDENT 會傳回識別欄位目前的識別值和最大值。如果這兩個值不同,則應該重設識別值以防止值序列中發生錯誤或間距。

DBCC CHECKIDENT ( table_name )

DBCC CHECKIDENT ( table_name, RESEED )

如果資料表目前的識別值小於識別欄位所儲存的最大識別值,就會利用識別欄位中的最大值來重設它。

DBCC CHECKIDENT ( table_name, RESEED,new_reseed_value )

目前識別值設為 new_reseed_value。如果建立好資料表之後,未插入任何資料列,或已經使用 TRUNCATE TABLE 陳述式來移除所有資料列,執行 DBCC CHECKIDENT 之後所插入的第一個資料列會利用 new_reseed_value 來進行識別。否則,下一個插入的資料列便會使用 new_reseed_value + 目前的累加值。

如果資料表不是空的,則將識別值設定為小於識別欄位中最大值的數字,可能會導致下列其中一種狀況:

  • 如果識別欄位中有 PRIMARY KEY 或 UNIQUE 條件約束,則稍後在資料表中進行插入作業時會產生錯誤訊息 2627,因為所產生的識別值會與現有值相衝突。
  • 如果沒有 PRIMARY KEY 或 UNIQUE 條件約束,則稍後進行的插入作業會導致重複的識別值。

例外狀況

下表列出 DBCC CHECKIDENT 不會自動重設目前識別值的狀況,並提供重設值的方法。

狀況 重設方法

目前的識別值大於資料表中的最大值。

  • 執行 DBCC CHECKIDENT (table_name, NORESEED) 來判斷資料行中目前的最大值,然後在 DBCC CHECKIDENT (table_name, RESEED,new_reseed_value) 命令中,將該值指定為 new_reseed_value

  • new_reseed_value 設為很低的值來執行 DBCC CHECKIDENT (table_name, RESEED,new_reseed_value),然後再執行 DBCC CHECKIDENT (table_name, RESEED) 來更正值。

資料表中的所有資料列都遭到刪除。

new_reseed_value 設為所要的開始值來執行 DBCC CHECKIDENT (table_name, RESEED,new_reseed_value)。

權限

呼叫者必須擁有資料表,或是系統管理員 (sysadmin) 固定伺服器角色、db_owner 固定資料庫角色,或 db_ddladmin 固定資料庫角色的成員。

範例

A. 必要的話,重設目前的識別值

在必要時,下列範例會重設 AdventureWorks 資料庫中 Employee 資料表目前的識別值。

USE AdventureWorks;
GO
DBCC CHECKIDENT ("HumanResources.Employee");
GO

B. 報告目前的識別值

下列範例會報告 AdventureWorks 資料庫中 Employee 資料表目前的識別值,如果識別值不正確,並不會更正它。

USE AdventureWorks;
GO
DBCC CHECKIDENT ("HumanResources.Employee", NORESEED);
GO

C. 將目前識別值強制設為 30

下列範例會將 Employee 資料表中 EmployeeID 資料行的目前識別值強制設定為值 300。由於此資料表具有現有資料列,因此下一個插入的資料列將會使用 301 當做其值,亦即目前的識別值加上 1 (針對資料行所定義的目前遞增值)。

USE AdventureWorks;
GO
DBCC CHECKIDENT ("HumanResources.Employee", RESEED, 30);
GO

請參閱

參考

ALTER TABLE (Transact-SQL)
CREATE TABLE (Transact-SQL)
DBCC (Transact-SQL)
IDENTITY (屬性) (Transact-SQL)
USE (Transact-SQL)

其他資源

複寫識別資料行

說明及資訊

取得 SQL Server 2005 協助

變更歷程記錄

版本 歷程記錄

2008 年 11 月 17 日

變更的內容:
  • 更正 new_reseed_value. 的定義。
  • 在「備註」一節中,新增有關變更初始值的部分。

2006 年 4 月 14 日

新增內容:
  • 新增將識別值設定為小於識別欄位中最大值的數字所導致結果的相關內容。
  • 針對資料表的所有資料列都遭到刪除時的情況新增關於「例外狀況」一節內容。

2005 年 12 月 5 日

新增內容:
  • 新增 new_reseed_value 引數描述的內容。