這篇文章其實是我另一篇文章的延伸,因為有一位網友提出了一個如我文章標題的問題,所以我想了一下,這是一種解決方式,當然在sql server中使用storedproced來用迴圈方式,也是解決的方法之一!
看本篇文章之前,請先看過[SSIS-轉檔中如何抓出pk重覆的資料]這篇文章..,看這篇時才會比較了解在說什麼
這次的範例是直接更新資料,而不是要抓出重覆的資料是哪些
所以我只針對不一樣的地方做說明
首先先撈資料來源
oledb的資料來源,我假設資料來源的內容如下
這次會用到元件如下,oledb目的地的設定部份請先看過[SSIS-轉檔中如何抓出pk重覆的資料]這篇文章
差只差在最後一個元件不一樣,這次使用的是oledb命令
我的oledb目的地的設定如下畫面
在oledb命令設定如下,重點是sql語法中的?,也就是當資料重覆時要怎麼更新
請注意,這裡所連結的順序,要對照前一個頁籤中的”?”的順序連接哦,所以拉線時要想一下
第一次的執行結果,全部都是新增
我現在將第二資料刪掉,只留下第一筆,且cra_no是key
這樣如果新增應該就會失敗,因為發生資料重覆的現象
然後我再轉檔一次,結果如下,看到這裡,看的出來跟我第一次執行的結果哪裡不同嗎?
就是總共是2筆,但有發生一筆錯誤,而這一筆是要用來update用的
這樣第一筆就被更新了,但第二筆是新增進來的
但我要說是,在sssis轉檔中,用了這樣的方式,我所指的是oledb命令,效率是比較不好的
因為他還是要一筆一筆做,而不是大量批次的新增,所以效率上來說會比較慢,當你所要轉檔的資料越多,所需要的時間就會越長。
不過好處是可以另做處理,假如你的需求是轉檔是不管是否重覆,就是將資料更新過去的話
那就還蠻適合這樣的方法,給提問者參考看看囉!
留言列表