将SQL Server身份主键从1改为顺序
我有一个SQL Server 2000表,其中包含我们所有员工的编号,姓名和每位员工的信息。
公司出售后,所有数据将保留在原位,除了所有的员工ID号码将被删除,并将根据每个人的原始出租日期(doh)从1(并增加1)重新创建。
我可以按照所需顺序列出记录:
SELECT IdNumber
FROM EmpTable
ORDER BY doh ASC
( IdNumber
是一个身份主键,所以我必须暂时关闭它......然后再打开它。)没有其他任何东西绑定到该键列上。 这是一张包含所有内容的单一表格....属于每个员工。 如果2名员工拥有相同的DOH,那么获得更低ID号码并不重要。 但我想我总是可以在一个辅助字段上进行分类,例如:Last Name
但是,如何将相同的记录写回同一张表,只更改IdNumber
列?
作为“第二选择”......我可以用新的ID号码创建一个单独的表格......然后在所有内容都在......之后......并且工作......将新表格放到网上。
作为“第三选择”......我可以使用1表...并添加一个新字段NewId,将新创建的ID放在那里。
我想有很多方法可以做到这一点...但我似乎无法弄清其中的任何一种方法。
试试这个SQL命令DBCC CHECKIDENT(yourtable,reseed,1)
假设您关闭了IdNumber列的主键和标识,
UPDATE EmpTable
SET EmpTable.IdNumber = orderTable.rowNo
FROM( SELECT ROW_NUMBER() OVER (ORDER BY doh ASC) as rowNo, IdNumber
FROM EmpTable) as orderTable
WHERE orderTable.IdNumber = EmpTable.IdNumber
要正确地做到这一点,而不会丢失相关表的数据完整性,最好的办法是编写脚本(以便稍后重置它们)并使用旧ID删除所有FK。
为新员工ID添加一个新列。 重命名旧列,旧ID,并给新的旧名称。 然后使用旧列,将所有相关表中的员工ID更新为新ID。 然后添加FKs。这应该在数据库处于单用户模式下完成,并且在完成时没有人应该对数据库进行任何其他更改。 您可能会想要删除并重新创建所有索引(这些应该也是脚本)。
顺便提一句,如果两名或两名以上员工的雇佣日期相同,您将需要一个计划来处理。 这也需要先在开发环境中完成,然后所有的应用程序,报告,导入/导出都需要进行全面测试,以确保它们仍然可以正常工作。 通常情况下,如果不再需要更长的时间(取决于数据库的复杂性),至少需要一个月才能完成设置和测试,然后再转向产品。 这是一项不可能以随意或slapdash方式完成的关键任务。 除非你知道如何恢复(并且已经采取措施),否则不要考虑这样做。
链接地址: http://www.djcxy.com/p/95673.html上一篇: Changing a SQL Server identity primary key to be sequential from 1