我的桌子有100000条记录。在这里,我有一列是Identity列。现在我想只更新Identity列的所有这些记录。我想更新所有已重置的身份,并从3000开始。
我找到了这个查询但它只适用于新记录:
DBCC CHECKIDENT ('[Patient]', RESEED, 3000);
答案 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