0

我有一个 SQL Server 2000 表,其中包含我们所有的员工编号、姓名和每个员工的信息。

公司出售后,所有数据都将保留,除了所有员工 ID 号码将被删除,并将根据每个人的原始雇佣日期 (doh) 从 1 重新创建(并增加 1)。

我可以使用以下命令按所需顺序列出记录:

SELECT IdNumber    
FROM EmpTable    
ORDER BY doh ASC

(这IdNumber是一个身份主键,所以我必须暂时将其关闭......然后再将其重新打开。)没有其他任何东西与该键列相关联。这是一个包含所有内容的 SINGLE 表......与每个员工有关。如果 2 名员工拥有相同的 DOH,那么哪个 ID 号较低并不重要。但我想我总是可以对第二个字段进行子排序,例如:姓氏

但是我如何将这些相同的记录写回同一个表,只更改IdNumber列?

作为“第二选择”......我可以用新的身份证号码制作一个单独的表格......然后在一切都在那里......并且工作......将新表格放到网上。

作为“第三选择”...我可以使用 1 个表...并添加一个新字段 NewId,将新创建的 ID 放在那里。

我想有很多方法可以做到这一点......但我似乎无法弄清楚其中的任何一个。

4

3 回答 3

0

要正确执行此操作而不丢失相关表的数据完整性,最好的办法是编写脚本(以便以后更容易重置它们)并使用旧 ID 删除所有 FK。

为新员工 ID 添加一个新列。重命名旧列,旧 Id,并将新列命名为旧名称。然后使用 oldid 列,将所有相关表中的员工 ID 更新为新 ID。然后重新添加 FK。这应该在单用户模式下使用数据库完成,并且在完成时任何人都不应对数据库进行任何其他更改。您可能想要删除并重新创建所有索引(这些索引也应该编写脚本)。

顺便说一句,如果两个或多个员工的雇用日期相同,您将需要一个如何处理它的计划。这也需要首先在开发环境中完成,然后需要对所有应用程序、报告、导入/导出进行全面测试,以确保它们仍然有效。一般来说,这样的事情至少需要一个月甚至更长的时间(取决于数据库的复杂性)才能在转移到 prod 之前进行彻底的设置和测试。这是一项关键任务,不能随意或草率地完成。甚至不要考虑这样做,除非您拥有知道如何恢复的良好备份(并且已经开始这样做)。

于 2013-07-09T18:40:48.573 回答
0

试试这个 sql 命令DBCC CHECKIDENT (yourtable, reseed, 1)

于 2013-07-09T17:44:07.237 回答
0

假设您关闭了 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
于 2013-07-09T17:45:18.070 回答