DBCC CHECKIDENT 重置数据库标识列从某一数值开始

B. 报告当前标记值

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 + 当前增量值。
假诺该表不为空,那么将标志值设置为小于标记列中的最大值的数字时,将会自然则然下列景况之一:
借使标志列中设有 PPRADOIMA奥迪Q5Y KEY 或 UNIQUE
约束,则随着在表中施行插入操作时将生成错误信息2627,原因是浮动的标志值将与现存值冲突。 如果不设有 P本田CR-VIMA奥迪Q5Y KEY 或
UNIQUE 约束,则跟着的插入操作将发出重复的标记值。 分外 下表列出了 DBCC
CHECKIDENT 不自动重新初始化当前标记值时的法规,并提供了重新设置该值的法子。 条件
重新载入参数方法 当前标记值大于表中的最大值。 实行 DBCC CHECKIDENT (table_name,
NORESEEDState of Qatar 能够规定列中的当前最大值,然后钦定该值作为 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, 300State of Qatar; GO

咱俩要询问表t1的眼下标志值,sql如下:

new_reseed_value

dbcc checkident(‘t1’,noreseed)

认清Table是不是留存自增列(Identity columnState of Qatar,并搜查缉获自增列相关数据:

数不胜数时候大家供给重新恢复生机设置某些表的自增列,让自增列重新从1伊始记数。最蠢的法子自然是把该表删掉再重新建表了。其实,还会有任何的办法能够重新载入参数自增列的值:

参数

dbcc checkident(‘t1’,reseed,0)

无论是是或不是钦点别的取舍,DBCC CHECKIDENT 重返以下结果集:

参数:
table_name:是要对其日前标志值举办检讨的表名。钦点的表必得含有标记列。表名必得相符标记符准绳。
NORESEED:钦点不应改革当前标记值。 RESEED:内定相应改动当前标志值。
new_reseed_value:用作标志列的一时一刻值的新值。 WITH
NO_INFOMSGS:撤除彰显全体音信性新闻。

NORESEED

形式二:使用DBCC CHECKIDENT语句: DBCC CHECKIDENT在 SQL Server 2010 奥迪Q32中检查钦定表的近期标志值,如有须要,则校勘标记值。还足以使用 DBCC
CHECKIDENT 为标志列手动设置新的当前标志值。

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

语法:

table_name

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

下例在须求的景观下重新恢复生机设置 jobs 表的当前标记值。

为人师表:大家要重新苏醒设置表t1的一时一刻标记值为0,sql如下:

USE pubsGODBCC CHECKIDENT (jobs, NORESEED)GO

正文来源:

对脚下标记值所做的切切实实校订在于参数标准。

措施一:使用TRUNCATE TABLE语句: TRUNCATE
TABLE删除表中的具备行,而不记录单个行删除操作,同一时候重新载入参数自增列。TRUNCATE
TABLE 在效果与利益上与从不WHERE子句的DELETE语句相通;但是,TRUNCATE TABLE
速度更加快,使用的系统能源和作业日志财富越来越少。

DBCC CHECKIDENT 语句

if Exists(Select top 1 1 from sysobjects so Where so.xtype = ‘U’ and
upper(so.name) = upper(@Table_name) and Exists(Select Top 1 1 from
syscolumns sc Where sc.id = so.id and columnproperty(sc.id, sc.name,
‘IsIdentity’) = 1 ) ) select 1else select 0

declare @Table_name varchar(60)

if Exists(Select top 1 1 from sysobjects Where objectproperty(id,
‘TableHasIdentity’) = 1 and upper(name) = upper(@Table_name) ) select
1else select 0