簡體   English   中英

如何根據SSIS中數據流任務的比較刪除行?

[英]How to delete rows based on comparison from Data Flow Task in an SSIS?

我有一個帶有兩個OLE DB Source對象的DataFlow任務。 這是我想使用SSIS實現的SQL:

Insert into server2.db.dbo.[table2] (...)
Select col1, col2, col3 ...
from Server1.db.dbo.[table1] where [table1.col1] not in 
(Select col5 from server2.db.dbo.[table2] Where ...)

我對SSIS還是很陌生,不確定如何實現。 我以為可以使用“數據流”任務執行此操作,並使用來自server1.db.dbo.table1的數據填充第一個源,並使用server2.db.dbo。[table2]填充第二個源,然后在插入之前進行條件檢查進入server2.db.dbo。[table2]。 我不確定如何進行條件檢查。 任何幫助表示贊賞。

查找很好(僅在不匹配的情況下僅定向行),但有時最好將數據暫存到表中,然后在目標服務器上的SQL任務中進行處理,就像執行SQL語句一樣。

如果使用查找,則必須當心-它會根據查找任務中的設置緩存整個集(您將看到該包花費很長時間進行初始化),並且SSIS區分大小寫,而SQL服務器將取決於排序規則設置。

最簡單的方法是使用sql.db1.col.table.1中的sql select col1, col2, col3 ... from db.dbo.[table1]保留server1中的oledb源對象。 然后,在您的數據流中,接下來使用sql select col5 from db.dbo.[table2] where ...的SQL select col5 from db.dbo.[table2] where ... server2中進行查找。 在查找中設置錯誤條件(對話框左下方的按鈕),以在不匹配時重定向行。 通過從左側的col1拖動到右側的col5來設置匹配條件(對話框頂部的選項卡)以在col1和col5之間進行匹配(如果您這樣做的話,應該在它們之間出現一個箭頭)。 完成后,放置OleDb目標對象並將錯誤輸出從查找拖到該對象的輸入。 選擇server2.db.dbo。[table2]作為目標表並正確映射行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM