2017-03-04 49 views
3

我有沒有標識列的數據庫表。我們將客戶端數據從DB2提取到SQL Server,不幸的是,DB2設計沒有標識列。如何在SQL服務器中執行增量加載

現在我們有一些數據插入,更新和刪除從源(DB2/SQL Server)和我想要使用一些增量負載概念加載到目標(SQL Server)的這些數據。

我在Dataflow任務中嘗試了SSIS查找,但是插入一條新記錄需要很長時間。請注意,在「查找轉換編輯器」中,我將所有「可用輸入列」映射到可用的「可用查找列」,因爲沒有標識列。我想,這就是爲什麼需要時間。我有幾張桌子有大約2000萬條記錄。

有沒有更快的方法/方法可以做到這一點,特別是當表沒有標識列時?除了或SQL合併會有幫助嗎?

我打算有除SSIS以外的其他方法。

+0

你能檢查我的答案是我的回答對你有幫助嗎? –

+0

謝謝。將嘗試和更新。 – AskMe

回答

0

查找是SSIS需要一些時間,因此您可以使用ESQL Task並調用合併過程。 我覺得你可以做在列使用有合併過程中,您可以在源表中創建一個列和更新的記錄,像

merge desination 
using 
{ 
source columns from source s} 
join desination d 
on s.primarykey=d.primary key 
when matched then 
s.updatedrecord=1 
when not matched then 
insert into desination columns. 

從上述查詢你新的記錄將被插入和更新什麼記錄在updatedrecord列的幫助下可以更新或成功地將它們插入目標表中。

您可以轉到以下鏈接進行合併過程。

https://www.sqlservercentral.com/Forums/Topic1042053-392-1.aspx https://msdn.microsoft.com/en-us/library/bb510625.aspx

0

如果你的來源是DB2例如一個SQL查詢,嘗試添加一個新列到這一點。這將是您選擇的「期望更改或希望監視更改」的列上的校驗和值。

SELECT 
BINARY_CHECKSUM(
    Column1 
    ,Column2 
    ,Column3)AS ChecksumValue 
,Column1 
,Column2 
,Column3 
FROM #TEMP 

您將不得不將這添加到SQL中的現有表中,以便能夠開始比較。 如果你有這個,那麼你可以在校驗和值計算器上進行查找而不是在列上進行查找。由於數字查找比多列的varchar比較快很多。我猜測,因爲沒有密鑰,那麼你就必須在校驗和匹配(這應該不會改變現有記錄)和不匹配之間拆分數據。不匹配可能是新行或只是更新。但是你的設置應該小一些。

祝你好運。 HTH

相關問題