【问题标题】:Moving history data from a database to another through SSIS package通过 SSIS 包将历史数据从一个数据库移动到另一个数据库
【发布时间】:2015-06-18 14:49:06
【问题描述】:

我有两个数据库,我想将一些历史数据从一个事实表移动到另一个数据库,目标表与源表完全相同,包括所有约束。

我使用SSIS 包来传输数据,如下所示:

  1. 首先使用 OLE DB Source 从源中选择所需时间段的数据。
  2. 使用 OLE DB Destination 将其加载到临时表到第二个数据库中。
  3. 然后使用 Execute SQL Task 将其加载到最终表中

    但我得到以下错误

错误:违反 PRIMARY KEY 约束 'PK__Financia__362B520524BEA57A'。无法插入重复键 对象'Fact.FinancialTransactions'。重复键值为 (100001 , 2010012, 2010 年 12 月 31 日 12:00AM, 65, 88)。

如何解决这个问题?我想将约束保留在目标表中。

【问题讨论】:

  • 您需要指定问题所在。您想对重复键做什么?更新现有条目,创建另一个,忽略它?您是否正在复制已经复制的数据?在这种情况下,您可以忽略重复项 - 实际上您根本不应该复制它们。

标签: sql-server


【解决方案1】:

您可能希望再添加一个执行 SQL 任务,该任务会在一段时间内禁用约束。但问题是如果您禁用主键,则无法对表执行任何操作,因此删除也可以是一种选择,但重新创建再次需要时间。所以最好的选择是修复错误或通过以下方式重建索引

ALTER TABLE t1 REBUILD WITH (IGNORE_DUP_KEY = ON)

这将允许忽略重复。更多信息在这里。Can I set ignore_dup_key on for a primary key?

【讨论】:

  • 这不会保留约束,它会忽略它。创建重复条目不是一个可行的解决方案,尤其是对于名为“FinancialTransactions”的表
  • 我的回答要求为用户提供所有选项并要求他评估
  • 我刚刚忽略了PK。即删除它的PK。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-11
  • 2016-02-18
相关资源
最近更新 更多