DBCC CHECKIDENT
(
????????table_name
????????[ , {?NORESEED | { RESEED [ , new_reseed_value ] }?}?]
)
[ WITH NO_INFOMSGS ] 參數(shù) table_name
是要對其當(dāng)前標(biāo)識值進行檢查的表名。指定的表必須包含標(biāo)識列。表名必須符合標(biāo)識符規(guī)則。
指定不應(yīng)更改當(dāng)前標(biāo)識值。
指定應(yīng)該更改當(dāng)前標(biāo)識值。
用作標(biāo)識列的當(dāng)前值的新值。
取消顯示所有信息性消息。
無論是否為包含標(biāo)識列的表指定了任何選項,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. 注釋
對當(dāng)前標(biāo)識值所做的具體更正取決于參數(shù)規(guī)范。
| DBCC CHECKIDENT ( table_name, NORESEED ) | 不重置當(dāng)前標(biāo)識值。DBCC CHECKIDENT 將返回標(biāo)識列的當(dāng)前標(biāo)識值和當(dāng)前最大值。如果這兩個值不相同,則應(yīng)重置標(biāo)識值,以避免值序列中的潛在錯誤或空白。 |
| DBCC CHECKIDENT ( table_name ) 或者 DBCC CHECKIDENT ( table_name, RESEED ) | 如果表的當(dāng)前標(biāo)識值小于標(biāo)識列中存儲的最大標(biāo)識值,則使用標(biāo)識列中的最大值對其進行重置。 |
| DBCC CHECKIDENT ( table_name, RESEED, new_reseed_value ) | 將當(dāng)前標(biāo)識值設(shè)置為 new_reseed_value。如果自從創(chuàng)建表以來未在表中插入任何行,或者已使用 TRUNCATE TABLE 語句刪除所有行,則在運行 DBCC CHECKIDENT 之后插入的第一行將使用 new_reseed_value 作為標(biāo)識。否則,插入的下一行將使用 new_reseed_value + 當(dāng)前增量值。 如果該表不為空,那么將標(biāo)識值設(shè)置為小于標(biāo)識列中的最大值的數(shù)字時,將會出現(xiàn)下列情況之一:
|
異常
下表列出了 DBCC CHECKIDENT 不自動重置當(dāng)前標(biāo)識值時的條件,并提供了重置該值的方法。
| 當(dāng)前標(biāo)識值大于表中的最大值。 |
或者
|
| 刪除表中的所有行。 | 在將 new_reseed_value 設(shè)置為所需開始值的情況下執(zhí)行 DBCC CHECKIDENT (table_name, RESEED, new_reseed_value)。 |
更改種子值
種子值是針對裝入表的第一行插入到標(biāo)識列的值。所有后續(xù)行都包含當(dāng)前標(biāo)識值和增量值,其中當(dāng)前標(biāo)識值是為當(dāng)前表或視圖生成的最新標(biāo)識值。有關(guān)詳細(xì)信息,請參閱創(chuàng)建和修改標(biāo)識符列。
不能使用 DBCC CHECKIDENT 執(zhí)行下列任務(wù):
- 更改創(chuàng)建表或視圖時為標(biāo)識列指定的原始種子值。
- 重設(shè)表或視圖中的現(xiàn)有行的種子值。
若要更改原始種子值并重設(shè)所有現(xiàn)有行的種子值,必須刪除并重新創(chuàng)建標(biāo)識列,然后為標(biāo)識列指定新的種子值。當(dāng)表包含數(shù)據(jù)時,還會將標(biāo)識號添加到具有指定種子值和增量值的現(xiàn)有行中。無法保證行的更新順序。
權(quán)限調(diào)用方必須擁有表,或者是 sysadmin 固定服務(wù)器角色、db_owner 固定數(shù)據(jù)庫角色或 db_ddladmin 固定數(shù)據(jù)庫角色的成員。
示例A. 根據(jù)需要重置當(dāng)前標(biāo)識值
以下示例根據(jù)需要重置 AdventureWorks 數(shù)據(jù)庫中 Employee 表的當(dāng)前標(biāo)識值。
USE AdventureWorks;GO
DBCC CHECKIDENT ("HumanResources.Employee");
GO
B. 報告當(dāng)前標(biāo)識值
以下示例報告 AdventureWorks 數(shù)據(jù)庫的 Employee 表中的當(dāng)前標(biāo)識值,但如果該標(biāo)識值不正確,不會進行更正。
USE AdventureWorks;GO
DBCC CHECKIDENT ("HumanResources.Employee", NORESEED);
GO
C. 強制將當(dāng)前標(biāo)識值設(shè)為新值
以下示例強制將 Employee 表中的 EmployeeID 列中的當(dāng)前標(biāo)識值設(shè)置為 300。因為該表有現(xiàn)有行,因此下一個插入行將使用 301 作為值,即當(dāng)前標(biāo)識值加上 1(為該列定義的當(dāng)前增加值)。
USE AdventureWorks;GO
DBCC CHECKIDENT ("HumanResources.Employee", RESEED, 300);
GO
轉(zhuǎn)自:http://msdn.microsoft.com/zh-cn/library/ms176057.aspx
轉(zhuǎn)載于:https://www.cnblogs.com/wenanry/archive/2009/12/07/1618852.html
總結(jié)
以上是生活随笔為你收集整理的DBCC CHECKIDENT的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQLSERVER数据库日志文件过大,如
- 下一篇: 质量糟糕的代码会在项目中像病毒一样传播,