SSIS-如何在轉檔的過程中當資料重覆則更新,無則新增資料

  • 14654
  • 0
  • SSIS
  • 2010-11-04

SSIS-如何在轉檔的過程中當資料重覆則更新,無則新增資料

這篇文章其實是我另一篇文章的延伸,因為有一位網友提出了一個如我文章標題的問題,所以我想了一下,這是一種解決方式,當然在sql server中使用storedproced來用迴圈方式,也是解決的方法之一!

看本篇文章之前,請先看過[SSIS-轉檔中如何抓出pk重覆的資料]這篇文章..,看這篇時才會比較了解在說什麼

這次的範例是直接更新資料,而不是要抓出重覆的資料是哪些

所以我只針對不一樣的地方做說明

首先先撈資料來源

clip_image001

oledb的資料來源,我假設資料來源的內容如下

clip_image002

這次會用到元件如下,oledb目的地的設定部份請先看過[SSIS-轉檔中如何抓出pk重覆的資料]這篇文章

差只差在最後一個元件不一樣,這次使用的是oledb命令

clip_image003

我的oledb目的地的設定如下畫面

clip_image004

clip_image005

在oledb命令設定如下,重點是sql語法中的?,也就是當資料重覆時要怎麼更新

clip_image006

請注意,這裡所連結的順序,要對照前一個頁籤中的”?”的順序連接哦,所以拉線時要想一下

clip_image007

第一次的執行結果,全部都是新增

clip_image008

sql server資料表中的結果
clip_image009

我現在將第二資料刪掉,只留下第一筆,且cra_no是key

clip_image010

這樣如果新增應該就會失敗,因為發生資料重覆的現象

然後我再轉檔一次,結果如下,看到這裡,看的出來跟我第一次執行的結果哪裡不同嗎?

clip_image011

就是總共是2筆,但有發生一筆錯誤,而這一筆是要用來update用的

這樣第一筆就被更新了,但第二筆是新增進來的

clip_image012

但我要說是,在sssis轉檔中,用了這樣的方式,我所指的是oledb命令,效率是比較不好的

因為他還是要一筆一筆做,而不是大量批次的新增,所以效率上來說會比較慢,當你所要轉檔的資料越多,所需要的時間就會越長。

不過好處是可以另做處理,假如你的需求是轉檔是不管是否重覆,就是將資料更新過去的話

那就還蠻適合這樣的方法,給提問者參考看看囉!

‧覺得文章不錯請給我一個『讚』作為鼓勵喔!