【问题标题】:Transfer data from one database to another database with different schema将数据从一个数据库传输到另一个具有不同模式的数据库
【发布时间】:2016-10-01 18:53:45
【问题描述】:

我在将数据从一个 sqlserver 2008 r2 传输到另一个具有不同架构的 sqlserver 2012 数据库时遇到问题,这是一些不同的场景,

  1. 数据库 1

数据库 1 带有表 Firm 和 Client,它们都有 FirmId 和 ClientId 主键作为 int 数据类型, FirmId 是 int 数据类型,作为 Client 表中使用的引用键。

  1. 数据库2

具有相同表 Firm 和 Client 的数据库 2,它们都有 FirmId 和 ClientId 但主键作为唯一标识符, FirmId 是唯一标识符数据类型,作为客户端表中使用的引用键。

  1. 问题

问题不是将数据从1个数据库表复制到2个数据库表,而是将引用键的Firm表维护到Client表中。因为数据类型发生了变化。

我正在使用 sql server 2008 r2 和 sql server 2012

请帮助我解决/找到解决方案,我非常感谢您宝贵的时间和精力。谢谢

【问题讨论】:

  • 这是一次性转移还是需要经常运行的东西?
  • 它是一次性传输,基本上我们将架构旧数据库 1 更改为 int 数据类型作为主键,新数据库 2 将唯一标识符数据类型作为主键,
  • uniqueidentifier 对于主键来说是个坏主意,因为它会弄乱主键上的聚集索引

标签: sql-server database sql-scripts


【解决方案1】:

即使我远非 SQLServer 专家,我也会尝试一下 - 这是一个通用过程(当然,您必须对所有必须将 INT 替换为 UID 的表重复此过程.. .)。 我将使用表 A 来指代父级(公司,如果我清楚地理解您的示例)和表 B 来指代子级(客户,我相信)。

  1. 删除指向表A的关系
  2. 从表 A 的 id 列中删除标识
  3. 在表 A 上使用 Uniqueidentifier 创建一个新列
  4. 为 Uniqueidentifier 列生成值
  5. 在所有子表(表 B)中添加新的 Uniqueidentifier 列
  6. 使用 OLD id 列映射您的子记录并从您的父表更新新的 Uniqueidentifier 值。
  7. 删除所有 id 列
  8. 重新创建关系

话虽如此,我只想向您添加一个警告:转换为 UID 是,根据某些人的说法,a very bad idea。但如果您真的需要这样做,您可以编写(并测试)上述过程。

【讨论】:

  • 这个答案看起来像它会起作用。我同意你不让键成为唯一标识符/向导。
  • 感谢您的回答,但问题出在第 5 点和第 6 点。我在参考表中有大约 10k 条记录,是否会手动匹配参考键和更新键?
  • @adnan:不,您当然不应该手动执行此操作。完成第 4 步后,表 A 将具有 old_id (int) 和 new_id (guid)。因此,对于每个表 B 记录,您可以使用 old_id 作为参考来查找 new_id 值。
猜你喜欢
  • 2012-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-04
  • 1970-01-01
  • 2016-07-28
相关资源
最近更新 更多