DBCC CHECKIDENT (Transact-SQL)
更新: 2008 年 11 月 17 日
檢查指定資料表目前的識別值,必要的話,會變更識別值。您也可以使用 DBCC CHECKIDENT,針對識別欄位手動設定新的目前識別值。
語法
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 + 目前的累加值。 如果資料表不是空的,則將識別值設定為小於識別欄位中最大值的數字,可能會導致下列其中一種狀況:
|
例外狀況
下表列出 DBCC CHECKIDENT 不會自動重設目前識別值的狀況,並提供重設值的方法。
狀況 | 重設方法 |
---|---|
目前的識別值大於資料表中的最大值。 |
或
|
資料表中的所有資料列都遭到刪除。 |
將 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)
其他資源
說明及資訊
變更歷程記錄
版本 | 歷程記錄 |
---|---|
2008 年 11 月 17 日 |
|
2006 年 4 月 14 日 |
|
2005 年 12 月 5 日 |
|