DBCC CHECKIDENT 重置數(shù)據(jù)庫(kù)標(biāo)識(shí)列從某一數(shù)值開(kāi)始
DBCC CHECKIDENT 語(yǔ)法
DBCC CHECKIDENT
(
table_name
[ , { NORESEED | { RESEED [ , new_reseed_value ] } } ]
)
[ WITH NO_INFOMSGS ]參數(shù)
table_name
是要對(duì)其當(dāng)前標(biāo)識(shí)值進(jìn)行檢查的表名。指定的表必須包含標(biāo)識(shí)列。表名必須符合標(biāo)識(shí)符規(guī)則。
NORESEED
指定不應(yīng)更改當(dāng)前標(biāo)識(shí)值。
RESEED
指定應(yīng)該更改當(dāng)前標(biāo)識(shí)值。
new_reseed_value
用作標(biāo)識(shí)列的當(dāng)前值的新值。
WITH NO_INFOMSGS
取消顯示所有信息性消息。
結(jié)果集
無(wú)論是否為包含標(biāo)識(shí)列的表指定了任何選項(xiàng),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.注釋
對(duì)當(dāng)前標(biāo)識(shí)值所做的具體更正取決于參數(shù)規(guī)范。
DBCC CHECKIDENT 命令 標(biāo)識(shí)更正或所做的更正
DBCC CHECKIDENT ( table_name, NORESEED )
不重置當(dāng)前標(biāo)識(shí)值。DBCC CHECKIDENT 將返回標(biāo)識(shí)列的當(dāng)前標(biāo)識(shí)值和當(dāng)前最大值。如果這兩個(gè)值不相同,則應(yīng)重置標(biāo)識(shí)值,以避免值序列中的潛在錯(cuò)誤或空白。
DBCC CHECKIDENT ( table_name )
或者
DBCC CHECKIDENT ( table_name, RESEED )
如果表的當(dāng)前標(biāo)識(shí)值小于標(biāo)識(shí)列中存儲(chǔ)的最大標(biāo)識(shí)值,則使用標(biāo)識(shí)列中的最大值對(duì)其進(jìn)行重置。
DBCC CHECKIDENT ( table_name, RESEED, new_reseed_value )
將當(dāng)前標(biāo)識(shí)值設(shè)置為 new_reseed_value。如果自從創(chuàng)建表以來(lái)未在表中插入任何行,或者已使用 TRUNCATE TABLE 語(yǔ)句刪除所有行,則在運(yùn)行 DBCC CHECKIDENT 之后插入的第一行將使用 new_reseed_value 作為標(biāo)識(shí)。否則,插入的下一行將使用 new_reseed_value + 當(dāng)前增量值。
如果該表不為空,那么將標(biāo)識(shí)值設(shè)置為小于標(biāo)識(shí)列中的最大值的數(shù)字時(shí),將會(huì)出現(xiàn)下列情況之一:
如果標(biāo)識(shí)列中存在 PRIMARY KEY 或 UNIQUE 約束,則隨后在表中執(zhí)行插入操作時(shí)將生成錯(cuò)誤消息 2627,原因是生成的標(biāo)識(shí)值將與現(xiàn)有值沖突。
如果不存在 PRIMARY KEY 或 UNIQUE 約束,則隨后的插入操作將產(chǎn)生重復(fù)的標(biāo)識(shí)值。
異常
下表列出了 DBCC CHECKIDENT 不自動(dòng)重置當(dāng)前標(biāo)識(shí)值時(shí)的條件,并提供了重置該值的方法。
條件 重置方法
當(dāng)前標(biāo)識(shí)值大于表中的最大值。
執(zhí)行 DBCC CHECKIDENT (table_name, NORESEED) 可以確定列中的當(dāng)前最大值,然后指定該值作為 DBCC CHECKIDENT (table_name, RESEED, new_reseed_value) 命令中的 new_reseed_value。
或者
在將 new_reseed_value 設(shè)置為非常低的值的情況下執(zhí)行 DBCC CHECKIDENT (table_name, RESEED, new_reseed_value),然后運(yùn)行 DBCC CHECKIDENT (table_name, RESEED) 以更正該值。
刪除表中的所有行。
在將 new_reseed_value 設(shè)置為所需開(kāi)始值的情況下執(zhí)行 DBCC CHECKIDENT (table_name, RESEED, new_reseed_value)。
更改種子值
種子值是針對(duì)裝入表的第一行插入到標(biāo)識(shí)列的值。所有后續(xù)行都包含當(dāng)前標(biāo)識(shí)值和增量值,其中當(dāng)前標(biāo)識(shí)值是為當(dāng)前表或視圖生成的最新標(biāo)識(shí)值。有關(guān)詳細(xì)信息,請(qǐng)參閱創(chuàng)建和修改標(biāo)識(shí)符列。
不能使用 DBCC CHECKIDENT 執(zhí)行下列任務(wù):
更改創(chuàng)建表或視圖時(shí)為標(biāo)識(shí)列指定的原始種子值。
重設(shè)表或視圖中的現(xiàn)有行的種子值。
若要更改原始種子值并重設(shè)所有現(xiàn)有行的種子值,必須刪除并重新創(chuàng)建標(biāo)識(shí)列,然后為標(biāo)識(shí)列指定新的種子值。當(dāng)表包含數(shù)據(jù)時(shí),還會(huì)將標(biāo)識(shí)號(hào)添加到具有指定種子值和增量值的現(xiàn)有行中。無(wú)法保證行的更新順序。
權(quán)限
調(diào)用方必須擁有表,或者是 sysadmin 固定服務(wù)器角色、db_owner 固定數(shù)據(jù)庫(kù)角色或 db_ddladmin 固定數(shù)據(jù)庫(kù)角色的成員。
示例
A. 根據(jù)需要重置當(dāng)前標(biāo)識(shí)值
以下示例根據(jù)需要重置 AdventureWorks 數(shù)據(jù)庫(kù)中 Employee 表的當(dāng)前標(biāo)識(shí)值。
USE AdventureWorks;
GO
DBCC CHECKIDENT ("HumanResources.Employee");
GO
B. 報(bào)告當(dāng)前標(biāo)識(shí)值
以下示例報(bào)告 AdventureWorks 數(shù)據(jù)庫(kù)的 Employee 表中的當(dāng)前標(biāo)識(shí)值,但如果該標(biāo)識(shí)值不正確,不會(huì)進(jìn)行更正。
USE AdventureWorks;
GO
DBCC CHECKIDENT ("HumanResources.Employee", NORESEED);
GO
C. 強(qiáng)制將當(dāng)前標(biāo)識(shí)值設(shè)為新值
以下示例強(qiáng)制將 Employee 表中的 EmployeeID 列中的當(dāng)前標(biāo)識(shí)值設(shè)置為 300。因?yàn)樵摫碛鞋F(xiàn)有行,因此下一個(gè)插入行將使用 301 作為值,即當(dāng)前標(biāo)識(shí)值加上 1(為該列定義的當(dāng)前增加值)。
USE AdventureWorks;
GO
DBCC CHECKIDENT ("HumanResources.Employee", RESEED, 300);
GO
相關(guān)文章
SQLSERVER數(shù)據(jù)庫(kù)中的5173錯(cuò)誤解決方法
修復(fù)因?yàn)榭蛻裟沁呅枰@個(gè)數(shù)據(jù)庫(kù),當(dāng)我附加數(shù)據(jù)庫(kù)的時(shí)候報(bào)錯(cuò),數(shù)據(jù)庫(kù)是SQL2005,接下來(lái)將介紹詳細(xì)解決方法2013-03-03啟動(dòng)sqlserver服務(wù)的bat腳本分享
這篇文章主要介紹了啟動(dòng)sqlserver服務(wù)的bat腳本分享,本文直接給出腳本代碼,需要的朋友可以參考下2015-02-02sql自動(dòng)化檢查和分析工具 之soar和soar-web 安裝和使用體驗(yàn)
這篇文章主要介紹了sql自動(dòng)化檢查和分析工具 之soar和soar-web 安裝和使用體驗(yàn),本文分步驟給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04游標(biāo)刪除多個(gè)表里臟數(shù)據(jù)的方法
游標(biāo)刪除多個(gè)表里臟數(shù)據(jù)的方法,需要的朋友可以參考一下2013-03-03SQL Server中日期時(shí)間函數(shù)的用法詳解
本文詳細(xì)講解了SQL Server中日期時(shí)間函數(shù)的用法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05一段腳本實(shí)現(xiàn)自動(dòng)備份并保存最近幾天的SQL數(shù)據(jù)庫(kù)
這篇文章主要介紹了如何自動(dòng)備份并保存最近幾天的SQL數(shù)據(jù)庫(kù),需要的朋友可以參考下2014-03-03SQL?Server?數(shù)據(jù)庫(kù)基礎(chǔ)編程詳解
這篇文章主要為大家介紹了SQL?Server?數(shù)據(jù)庫(kù)基礎(chǔ)編程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-01-01SQL數(shù)據(jù)庫(kù)連接超時(shí)時(shí)間已到的問(wèn)題
這篇文章主要介紹了SQL數(shù)據(jù)庫(kù)連接超時(shí)時(shí)間已到的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04