在数据库重构期间映射ID的最简单方法

时间:2010-07-01 15:36:08

标签: sql sql-server database refactoring

我有一些名为 OrderId 的列表。我刚刚完成了重构,我想摆脱 Order 表,我有一个名为 Transaction 的新表。我希望所有包含 OrderId 列的表格现在都有 TransactionId

这是完整的。我现在需要填充 transactionId 列。我今天在 orderId transactionId 之间进行了映射,所以我希望看到最快的方式来填充新的 transactionId 列(我应该这样做)这通过代码,通过SQL查询等?? ??)

所以我在订单表中有transationId列,所以我可以进行连接。

我想要一个类似这样的查询(伪SQL)

update childTable CT
set transactionId = MapFromOrderId(CT.OrderId)

有什么建议吗?

2 个答案:

答案 0 :(得分:3)

我会在SQL代码中执行此操作:

UPDATE MT
SET
    transaction_id = MAP.transaction_id
FROM
    My_Table MT
INNER JOIN My_Map MAP ON
    MAP.order_id = MT.order_id

然后检查以确保每一行都已映射:

SELECT
    *
FROM
    My_Table
WHERE
    transaction_id IS NULL

答案 1 :(得分:1)

这个过程通常是:

  • 确保备份数据库
  • Addtransctionid到每个子表。 填充基于连接到 映射表(你确实存储了 orderid和。之间的映射 表中的transactionid?)
  • 确保没有空白值。
  • 然后你创建FK 交易,将fk放到 订单表然后删除orderid 列。
  • 然后转到下一张桌子 重复。
  • 测试以确保一切正常 适当

我肯定会在脚本中执行此操作,因此在开发和QA测试后很容易移植到prod。

在prod上,您需要在数据库处于单用户模式时执行此操作,以防止在进程转换时添加新订单。