重置现有值的标识列,而不删除现有记录

时间:2016-04-27 05:28:53

标签: sql sql-server

我的桌子有100000条记录。在这里,我有一列是Identity列。现在我想只更新Identity列的所有这些记录。我想更新所有已重置的身份,并从3000开始。

我找到了这个查询但它只适用于新记录:

DBCC CHECKIDENT ('[Patient]', RESEED, 3000);

3 个答案:

答案 0 :(得分:1)

我找到了自己的解决方案

步骤1)转到SQL工具菜单 步骤2)选择选项菜单 步骤3)将打开新的弹出窗口,单击Designers 步骤4)取消选中该复选框 - 阻止保存需要重新创建表的更改 步骤5)右键单击您的表格 步骤6)在设计模式下打开 步骤7)删除标识列 步骤8)再次使用下面的查询

添加带有Identity的已删除列
 alter table tableName
add columnName BIGINT identity(5000,1)

它会起作用

答案 1 :(得分:0)

重新启动的Dbcc checkident将更改实际身份计数器,而不是表中的值。要更改值,您必须使用“set identity_insert”

答案 2 :(得分:0)

这是另一种可能的解决方案。创建一个与Patient表具有相同定义的新表(我们称之为PatientNew)。将该表重新设置为所需值3000的开头 - 1.现在将Patient表复制到新表,然后根据您的要求获得标识。删除旧表并重命名新表。像这样:

  delete from PatientNew
  dbcc checkident('PatientNew', reseed, 2999)
  insert PatientNew(Col2, Col3) select Col2, Col3 from Patient

省略插入中的标识列,名称包括所有其他列。表删除和重命名操作可能需要您临时删除外键约束

ALTER TABLE Patient NOCHECK CONSTRAINT ALL

并在重命名后再次启用它:

ALTER TABLE Patient WITH CHECK CHECK CONSTRAINT ALL