2015-02-10 42 views
-1

如果源表包含DateTimeCreated和DateTimeUpdated列,那么更新目标表的最有效方法是什么?在源表中给出DateCreated和DateUpdated列的更新目标表

+1

按日期?你能否形成更具体的问题?这与SSIS有什么关系? – 2015-02-10 14:16:39

+0

真的很容易。我想保持源目标在同步避免截断。我正在寻找这种情况下的投注练习模式。 – cs0815 2015-02-10 14:27:36

回答

1

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

我会避免一个最佳做法的答案,但给予足够的细节,作出适当的选择。有与您可能会更新在SSIS表主要有两种方法,避免了TRUNCATE - LOAD:

1)使用OLEBD COMMAND

这是一个好方法,如果:

  • 你有一个可靠的DateTimeUpdated列,
  • 不会有太多的行更新,
  • 有没有很多的列更新
  • 有在T并不多添加的列他的数据流(即派生列转换)
  • 并且更新语句非常简单。

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

此外,当存在大量需要映射的列或数据流中发生大量转换时,此组件出现短缺。例如,如果您要将所有字符串列从unicode转换为非unicode,那么您可能会在组合中添加许多其他列,这会使映射和维护变得非常痛苦。该组件中的映射工具适用于大约10列,之后它开始非常快速地产生混淆。尤其是因为你映射到编号参数而不是列名。

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

2)阶段的数据和数据流

这种方法适合所有的理由,OLEDB命令是坏的,但有一些缺点后执行执行SQL任务的更新。还有更多的代码维护:

  • 一对夫妇的T-SQL任务,
  • 一个进程
  • 和一个临时表

这也意味着需要花费更多的时间来建立以及。但是,它的表现非常好,代码更易于阅读和理解。持续的维护也更简单。

请参阅从这个其他问题,我今天发生的事情来回答关于同一主题我的笔记:SSIS Compare tables content and update another