0

现有数据库已推广到多个客户。

现在我开发了一个插件,需要将我新添加的 PK-FK 表行传输到各种目标数据库。但我不能只复制 PK,因为目标可能已经使用该特定 PK,因此在编写更新脚本时对我来说处于未知状态......

除了将源数据库上的 PK 数量增加一万之外,还有什么想法,希望它足够高而不会干扰目标 PK?

谢谢

4

2 回答 2

0

我可能会结束

  • 将 GUID 添加到与我的 int PK 和 FK 平行的表中。
  • 用 newid() 填充这些字段并将这些值复制到 FK 表中。
  • 然后在没有 FK 数据的情况下传输我新添加的行(禁用检查约束后)
  • 然后使用我的 GUID 引用纠正 int FK 值。

天哪,剧本要花点时间……

更新: 感谢 Mikael 的评论,我在眼前找到了解决方案:

  • 我将添加一个新的“PK 阴影”列,默认为 PK 值。
  • 然后删除默认值(因此在扩展目标模式时目标数据库具有空值)
  • 所以在传输行之后(没有身份插入)我仍然会引用旧的 PK
  • 并且只需要更新所有使用 PK 影子列加入 FK 表的“损坏”FK

这里是脚本:http ://www.morrenth.com/transferring-some-rows-having-.aspx

于 2012-06-02T20:14:59.067 回答
0

您可以在脚本中使用变量来保存每个 PK 行的 scope_identity() 并在 FK 表中使用此值。

于 2012-06-02T20:44:55.230 回答