2015-02-10 16 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