2016-07-14 6 views
1

私は2つのSRCテーブルから値を切り捨て、STGテーブルに値を毎日ロードします。変更フラグ(Ch_Flg)とSTGテーブルを作成して、毎日テーブルを切り捨てるのではなく、SRCの特定のフィールドが変更されたときにのみSTGに値を挿入します。srcからの値が変更された場合にレコードをテーブルに挿入

しかし、SRCテーブルがSTGに直接ロードされるため、すべてのSRCレコードを格納できる場所と、レコードが変更された場合はSTGでチェックし、レコードが変更された場合にのみSTGに挿入する必要があります。

例えばSRC1テーブルが(ID、名前、タグ、部門、部門、市、電話番号、HIREDATEなど)のような列があり、SRC2が(ID、名前、コンピテンシー、市、電話番号など)のような列があり

SRCのすべての値を一時テーブルにロードしてからSTGテーブルと比較する必要がありますか?それとももっと効率的な方法がありますか?

答えて

0

あなたは一時テーブルにロードでき、その後、この

WITH SINGLES AS 
(
SELECT t1.ID 
FROM <sourcetablename> t1 
LEFT JOIN <desttablename> t2 
ON (t1.id = t2.id) 
WHERE t2.id IS NULL 
) 

INSERT <tabletherecordswillbeinserted>(ID, <otherfield>, <otherfield2>) 

SELECT S.id, S.<otherfield1>, s.<otherfield2> 
From singles S 
Left Join <sourcetablename> on S.id = <desttable>.id 
Where <desttable>.id Is Null 

ような何かをあなたがコードに変更フラグを追加する必要があるかもしれませんが、それは一般的なアイデアだ、あなたが変更フラグを入れることができますCTEステートメント

+0

構造をありがとう。シングルスとは何ですか? –

+0

これは「共通テーブル式」またはCTEと呼ばれ、特定のデータセットを集めて別のことを行う方法です。したがって、この場合、Withの内部でselectステートメントを実行してテーブルで実行すると、あるテーブルからすべてのものが返され、別のテーブルでは返されません。次に、その一連のデータを取り出し、存在しないレコードを宛先テーブルに挿入します。あなたのケースでは、私はあなたが人口転換フラグを持つレコードにのみ興味があると思います。だからあなたはあなたのレコードを変更して、それらを下に挿入するためにあなたをすることができます。 – DrHouseofSQL

+0

編集:スクリプトの一番下にある「その他のフィールド」はすべて、元のSELECTステートメントで選択する必要があります。申し訳ありません。 – DrHouseofSQL

関連する問題