我有一个表,它有一个主键 ID 列,并设置为每个新条目递增 1,这是一个相当标准的配置。该表会定期用新记录更新,并每月存档一次到存档表,然后截断。
在正常操作下,截断后进入表的下一条记录将是下一个 ID 值,确保存档表和“实时”表之间的 ID 没有重叠。
由于未知因素,活动表中的 ID 列以某种方式“恢复”为已使用的 ID。因为这个数据库设计得很糟糕,所以现在我遇到了一些数据完整性问题。
我解决此问题的解决方案是更新“实时”表中所有记录的 ID 列,这样就不会与“存档”表中存在的 ID 重叠。一旦我更新了 ID,我将重新设置 Identity 列,这样以后的记录也不会重叠。
我的问题不是关于重新播种列(使用 DBCC——我知道如何做到这一点),而是关于如何使用新的 ID 值重新编号现有记录。我应该使用循环的动态 SQL 查询(删除记录、插入记录)来执行此操作,还是有一些我不知道的 SQL Server 函数可以自动重新编号 ID 列?