删除 SQL Server 表记录后,想在新插入记录时,标识从 1 开始编号。
dbcc checkident('表名', RESEED, 0)
注意第三个参数是 0:由于这个表曾经有个记录,那么新插入第一条记录时,其标识就是 0 的下一个数,即 1;如果这个表从来没有插入过记录,那么新插入第一条记录时,其标识就是 0。
现在有这么一种捣蛋情况:
表中有不连续的记录,其标识值分别是 2、4,运行dbcc checkident('表名', RESEED, 0) 后:
插入一条记录,成功,标识值为 1。
再插入一条记录,很可能失败,为什么很可能失败呢,因为标识就是用来唯一标识一条记录的,那么您肯定将其设置为主键了,标识 2 的记录已经存在了,再插入就失败了。
再插入一条记录,成功,标识值为 3。
再插入一条记录,很可能失败……
再插入一条记录,成功,标识为 5。
sql 帮助
语法
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 约束,则随后的插入操作将产生重复的标识值。
转载于:https://www.cnblogs.com/whz881027/articles/2105992.html