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


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

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

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

首先先撈資料來源

image

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

image

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

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

image

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

image

image

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

image

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

image

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

image

sql server資料表中的結果
image

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

image

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

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

image

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

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

image


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

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

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

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

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 丫德 的頭像
    丫德

    信德隨想

    丫德 發表在 痞客邦 留言(7) 人氣()