程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> DBCC CHECKIDENT 重置數據庫標識列從某一數值開始

DBCC CHECKIDENT 重置數據庫標識列從某一數值開始

編輯:關於SqlServer
DBCC CHECKIDENT(N'dbo.Orders', RESEED, 0);

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 ( 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)。
更改種子值
種子值是針對裝入表的第一行插入到標識列的值。所有後續行都包含當前標識值和增量值,其中當前標識值是為當前表或視圖生成的最新標識值。有關詳細信息,請參閱創建和修改標識符列。
不能使用 DBCC CHECKIDENT 執行下列任務:
更改創建表或視圖時為標識列指定的原始種子值。
重設表或視圖中的現有行的種子值。
若要更改原始種子值並重設所有現有行的種子值,必須刪除並重新創建標識列,然後為標識列指定新的種子值。當表包含數據時,還會將標識號添加到具有指定種子值和增量值的現有行中。無法保證行的更新順序。
權限
調用方必須擁有表,或者是 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. 強制將當前標識值設為新值
以下示例強制將 Employee 表中的 EmployeeID 列中的當前標識值設置為 300。因為該表有現有行,因此下一個插入行將使用 301 作為值,即當前標識值加上 1(為該列定義的當前增加值)。
USE AdventureWorks;
GO
DBCC CHECKIDENT ("HumanResources.Employee", RESEED, 300);
GO

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved