【问题标题】:Is it possible to use SSIS in order to fill multiple tables with inheritance at the same time?是否可以使用 SSIS 来同时填充多个具有继承的表?
【发布时间】:2011-11-30 11:47:37
【问题描述】:

我有一个带有 3 个固有表的 MS SQL 数据库。一个通用的称为“工具”,还有两个更具体的称为“DieCastTool”和“Deburrer”。

我的任务是从旧的 MS Access“数据库”中获取数据。我的问题是,我必须做大量的搜索和过滤工作,直到获得想要导入新数据库的数据。所以最后我不想多次执行这些步骤,而是同时填充 3 个表。 因此,我使用的是 da Dataflowtarget,其中我没有选择某个表,而是使用 sql select 语句(在 id 列上有内部连接)来接收 3 个表的所有字段。然后我匹配列,我认为它应该可以工作。只要我只选择要填充的“工具”表的列,它就可以了。添加子表的列时,不幸的是它没有并返回错误代码 -1071607685 =>“没有可用的状态”

我能想到我的解决方案不起作用的两个原因:

  1. SSIS 根本无法处理 SQL 表中的继承并将它们视为单独的表。 (也许 SSIS 甚至无法处理在一个 Dataflowtarget 元素中填充多个表?)
  2. 我以错误的方式使用 SSIS。

如果有人可以确认/拒绝原因 1,那就太好了,因为我没有找到关于这个主题的任何内容。

【问题讨论】:

  • 如果我总结一下,源数据非常丑陋,清理它很复杂。由于这些复杂性,您的偏好是清理一次数据,然后按顺序写入最多 3 个表,以尊重潜在的 FK 关系。

标签: sql-server inheritance ssis sql-server-2008-r2


【解决方案1】:

是的,SSIS 不知道表关系。把它想象成:SSIS 只知道物理对象,而不是你的逻辑模型。

我不明白你是怎么得到这个错误的。无论如何,这里有解决方案:

  1. 如果这些表之间没有 FK 约束,您可以在一个数据流中使用一个源组件、一个多播和 3 个目标
  2. 如果存在 FK 约束并且您可以禁用它们,则使用 执行 SQL 任务以禁用(或删除)约束,添加相同的 数据流如 1. 并添加另一个执行 SQL 任务以启用(或 创建)约束
  3. 如果有 FK 约束并且您不能禁用它们,您可以使用 一个数据流读取所有数据并将其传递给后续数据流 逐表填表。看 SSIS Pass Datasource Between Control Flow Tasks

【讨论】:

  • 谢谢我用解决方案解决了我的问题。 3 => 首先读出数据,进行所有过滤并将数据写入临时存储,然后分别用该数据填充表
  • 顺便说一句,使用多播来填充 DieCastTool 和 Deburrer 表(同时)不起作用,我不得不将其拆分为单独的数据流
  • @Da_Wolf,很有趣,为什么?这两者之间有pk/fk关系吗?我经常这样做
  • 是的,这些表之间存在 pk/fk 关系
猜你喜欢
  • 2022-06-25
  • 2014-08-05
  • 1970-01-01
  • 2018-12-02
  • 1970-01-01
  • 2023-04-10
  • 2023-02-10
  • 1970-01-01
  • 2011-07-23
相关资源
最近更新 更多