2011-06-21 123 views
0

我有excel的源和sql服務器表。比較兩個源並更新SSIS中的sql server表?

Excel源列

Mno Price1 Price2 
111  10  20 
222  30  25 
333  40  30 
444  34  09 
555  23  abc 

SQL Server表

產品表名

PId Mno Sprice BPrice 
    1  111 3  50 
    2  222 14  23 
    3  444 32  34 
    4  555 43  45 
    5  666 21  67 

我想比較SQL Server產品表MNO Excel源MNO(型號)(型號),如果它相同我想更新Sql server產品表SPrice和Bprice。

請告訴我我想要做的步驟是什麼?

我想驗證Excel工作表也,因爲在Excel Price2列具有字符串值的

如果是字符串值,我想發郵件哪一行的數據是錯誤的。

我是SSIS的新成員,請給我詳細資料。

回答

0

就我個人而言,我認爲最簡單的方法是使用數據流將excel文件放入臨時表中,並在需要時進行清理。然後,下一步inmteh控制流將執行更新的Execute SQl任務。或者如果您需要更新或插入(如果記錄是新的),請在執行SQl任務中使用合併語句。

0

您可以使用具有完整外連接的合併連接轉換(記住在輸入到合併連接轉換之前對數據集進行排序),然後將輸出轉到條件拆分轉換。條件拆分變換可以確定是否需要更新,插入或刪除行,並將流引導至適當的變換來完成此操作。

這是我的頭頂,可能會有一個更簡單的轉換。近一年來,我還沒有機會與SSIS合作,所以我可能會生鏽。

1

在源代碼中讀取新數據,使用查找組件查找現有數據。將行直接匹配到oledb命令進行更新,併爲插入的非匹配目標(如果您想輸入新產品)進行匹配。

+0

這通常被稱爲「upsert」 –

+0

確實如此。這基本上是在SSIS中完成它的最簡單的方法,而不必關心匹配的數據是否與之不同,您可以通過在價格列(或其他要更新的列)上進行條件分割來避免產生sql命令,但只要源數據很小,所需的時間可能會忽略不計。 – cairnz