2015-01-12 21 views
1

使用SQL Server 2008SQL更新主表每小時基於敵不過複合PK

我有一個從下載FTP CSV文件重命名,並每隔一小時的文件的SSIS任務。之後,我正在將數據批量插入到名爲NEWFTPDATA的新表中。

此文件中的數據是當天到當前小時的數據。該表具有由4個不同列組成的複合主鍵。

我需要完成的下一步是使用T-SQL,將這個新表與我現有的主存檔表進行比較,並根據匹配插入任何尚不存在的行(或者在這4列上不匹配)

因爲我將每次下載這個文件(對於實時報告)爲每個後續運行將有重複的數據,我不想插入到主表中,以避免重複的數據。

我已經找到了基於一個特定列的存在做到這一點的方法,但我似乎無法弄清楚如何根據4列需要匹配來做到這一點。

的工作流程應該是從NEWFTPDATA如下

更新MASTERTABLE其中newftpdata.column1,newftpdata.column2,newftpdata.column3,newftpdata.column4在MASTERTABLE

不存在

希望我提供的大量資料對於這個問題。如果需要更多詳情,請告訴我。謝謝。

回答

1

可以使用MERGE

MERGE MasterTable as dest 
using newftpdata as src 
on 
dest.column1 = src.column1 
and 
dest.column2 = src.column2 
and 
dest.column3 = src.column3 
and 
dest.column4 = src.column4 
WHEN NOT MATCHED then 
    INSERT (column1, column2, ...) 
    values (Src.column1, Src.column2,....) 
+0

由於雷達。在此期間,我實際上偶然發現了另一種獲得相同結果的方式(我認爲)。使用下面的 插入到MasterTable SELECT * FROM newftpdata 除了 SELECT * FROM MasterTable 是否有顯著的好處,使用合併這個過程呢? – UnladenSwallow

+0

@Herpington_McDerpington,如果不存在()插入也很好,Merge是一個新的構造,它會做同樣的事,但需要更少的SQL並且易於閱讀。 – radar

+0

我想我用MERGE所要解決的問題是編寫所有列的必要性 - 有100多個......這不是什麼大不了的,因爲我只在存儲過程中做過一次) ,但如果我評論的另一種方法行之有效,那麼我寧願隨便說一下。非常感謝你的協助! – UnladenSwallow