2017-03-04 5 views
3

ID列がないDBテーブルがあります。 DB2からSQL Serverにクライアントデータをフェッチしましたが、残念ながらDB2デザインにはID列がありません。SQLサーバーの増分ロードを行う方法

ソース(DB2/SQL Server)と、インクリメンタルロードの概念を使用してロード先(SQL Server)にロードするこれらのデータが挿入、更新、削除されました。

データフロータスクでSSISルックアップを試しましたが、新しいレコードを挿入するだけの時間がかかりました。 「参照変換エディター」では、ID列がないため、使用可能なすべての「使用可能な入力列」を使用可能な「使用可能な参照列」にマッピングしています。私はこれが時間がかかる理由だと思う。私は約2,000万レコードのテーブルをいくつも持っています。

特にこれには、テーブルにID列がない場合に、これより高速な方法がありますか? exceptまたはSQL mergeが役に立ちますか?

私はSSIS以外の方法もあります。

+0

あなたは私の答えはあなたに役立つ私の答えをチェックできますか? –

+0

ありがとうございます。試して更新します。 – AskMe

答えて

0

SSISに時間がかかるので、ESQLタスクを使用してマージ手順を呼び出すことができます。私はあなたが何ができるかと思います 使用は、あなたのソース表の列を作成し、クエリの上にあなたの新しいレコードが挿入され、更新されますから

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

関連する問題