删除SQL Server中的记录后重置标识种子我已将记录插入SQL Server数据库表。该表定义了主键,并且自动增量标识种子设置为“是”。这主要是因为在SQL Azure中,每个表都必须定义主键和标识。但由于我必须从表中删除一些记录,这些表的标识种子将受到干扰,并且索引列(自动生成的增量为1)将受到干扰。删除记录后,如何重置标识列,以使列按数字顺序递增?标识列不用作数据库中任何位置的外键。
3 回答
紫衣仙女
TA贡献1839条经验 获得超15个赞
应该注意的是,如果所有数据都是通过DELETE
(即无WHERE
子句)从表中删除的,那么只要a)权限允许它,并且b)没有引用该表的FK(似乎是在这种情况下,使用TRUNCATE TABLE
将是优选的,因为它更有效DELETE
并且同时重置IDENTITY
种子。
与DELETE语句相比,TRUNCATE TABLE具有以下优点:
使用较少的事务日志空间。
DELETE语句一次删除一行,并在事务日志中为每个已删除的行记录一个条目。TRUNCATE TABLE通过释放用于存储表数据的数据页来删除数据,并仅在事务日志中记录页面解除分配。
通常使用较少的锁。
使用行锁执行DELETE语句时,表中的每一行都被锁定以进行删除。TRUNCATE TABLE总是锁定表(包括模式(SCH-M)锁)和页面,但不是每行。
毫无例外,表格中留有零页面。
执行DELETE语句后,表仍可以包含空页。例如,如果没有至少一个独占(LCK_M_X)表锁,则无法释放堆中的空页。如果删除操作不使用表锁,则表(堆)将包含许多空页。对于索引,删除操作可以留下空页,尽管这些页面将通过后台清理过程快速释放。
如果表包含标识列,则该列的计数器将重置为为该列定义的种子值。如果未定义种子,则使用默认值1。要保留身份计数器,请改用DELETE。
所以以下内容:
DELETE FROM [MyTable];DBCC CHECKIDENT ('[MyTable]', RESEED, 0);
变得公正:
TRUNCATE TABLE [MyTable];
添加回答
举报
0/150
提交
取消