给定源表中的DateCreated和DateUpdated列更新目标表

时间:2015-02-10 13:24:08

标签: ssis

鉴于源表包含DateTimeCreated和DateTimeUpdated列这一事实,更新目标表的最有效方法是什么?

1 个答案:

答案 0 :(得分:1)

  

我想保持目标源同步避免a   截短。我正在寻找这种情况下的投注练习模式

我会避免最佳做法答案,但要提供足够的细节以做出适当的选择。您可以使用两种主要方法更新SSIS中的表,避免使用TRUNCATE - LOAD:

1)使用OLEBD COMMAND

如果符合以下条件,此方法很好:

  • 您有一个可靠的DateTimeUpdated列,
  • 要更新的行数不多,
  • 没有很多要更新的列
  • 数据流中添加的列数不多(即派生列转换)
  • 并且更新声明非常简单。

此方法对许多列执行效果不佳,因为它执行逐行更新。依赖审计日期列可以是减少要更新的行数的好方法,但如果在源系统中更新行并且未更改审计列,则它也会导致问题。如果它有触发器,我建议只信任它,或者你可以确定没有人可以在桌面上执行更新。

此外,当有大量要映射的列或在数据流中进行大量转换时,此组件不足。例如,如果要将所有字符串列从unicode转换为非unicode,则混合中可能会有许多其他列,这会使映射和维护变得困难。此组件中的映射工具适用于大约10列,之后很快就会变得混乱。特别是因为您要映射到带编号的参数而不是列名。

最后,如果你在update语句中执行任何复杂的操作,它更适合于SQL代码,而不是在没有智能感知的组件编辑器中维护它,并且通常很难使用。

2)在数据流

之后暂存数据并在执行SQL任务中执行更新

这种方法适用于OLEDB命令不好的所有原因,但也有一些缺点。需要维护更多代码:

  • 几个t-sql任务,
  • a proc
  • 和临时表

这也意味着设置也需要更多时间。但是,它确实表现得非常好,并且代码更容易阅读和理解。正在进行的维护也很简单。

请参阅今天我碰巧就同一主题回答的其他问题的笔记:SSIS Compare tables content and update another