2009-07-15 23 views
4

SQL Server 2008で実行するSSISパッケージを作成しています.SSISでどのようにUPSERTを実行しますか?UPSERT in SSIS

 
IF KEY NOT EXISTS 
    INSERT 
ELSE 
    IF DATA CHANGED 
    UPDATE 
    ENDIF 
ENDIF 

答えて

3

私は、SQL ServerのupsertでMat Stephenのウェブログを見ることをお勧めします。

SQL 2005 - UPSERT: In nature but not by name; but at last!

+0

Txです。 T-SQLコマンドに対応するSSISはありますか?ウォークスルーは非常に便利です。 (noob) –

+4

リンクが死んでいるようです。試してみてくださいhttp://blogs.technet.com/mat_stephen/archive/2005/08/31/410022.aspx – Rydell

1

年間にわたって使用されてきた基本的なデータ操作言語(DML)コマンドは、更新、挿入および削除されています。彼らはあなたが期待していることを正確に行います:Insertは新しいレコードを追加し、Updateは既存のレコードを変更し、Deleteはレコードを削除します。

UPSERTステートメントは、レコードが存在しない場合は既存のレコードを変更し、新しいレコードを挿入します。 UPSERT命令の機能は、2つの新しいTSQL演算子セットによって達成されます。これらの2つの新しいものを除き

EXCEPT 
INTERSECT 

です: -

戻り値も右クエリから返されていないオペランドEXCEPTの左にクエリから任意の別個の値

Intersect: - INTERSECTオペランドの左辺と右辺の両方のクエリによって返される任意の異なる値を返します。

例: - 1が返され、それは

SELECT * FROM TABLE_1 INTERSECT SELECT * FROM TABLE_2 

Table_2

中のtable_1に存在しないように3,4を返すであろう我々は、2つのテーブル表1及び表2

Table_1 column name(Number, datatype int) 
---------- 

1 
2 

3 
4 
5 

Table_2 column name(Number, datatype int) 
---------- 

1 
2 

5 

SELECT * FROM TABLE_1 EXCEPT SELECT * FROM TABLE_2 

を有していると言うことができます2,5がTable_1とTable_2の両方のテーブルに存在しているためです。コンプレックスの

すべての痛みは今、SSISでこの機能を使用するには

:-)解消されるジョインあなたは、「SQLを実行」タスクを追加し、そこにコードを配置する必要があるすべて。

9

SQL Server 2008 - Using Merge From SSISを参照してください。私はこのようなものを実装しました。とても簡単でした。 BOLのページInserting, Updating, and Deleting Data using MERGEを使用するだけで、私を動かすことができました。

+0

私は確認、マージは行く方法です。ここKimballで読む:http://www.kimballgroup。com/html/08dt/KU107_UsingSQL_MERGESlowlyChangingDimension.pdf –

+0

kimballgroupのリンクが無効です。 – Kyle

0

(あなたは前段階または段階のテーブルを持っている場合)、SQLでのアップサートを作成するもう1つの方法:

--Insert Portion 
INSERT INTO FinalTable 
(Colums) 
SELECT T.TempColumns 
FROM TempTable T 
WHERE 
(
    SELECT 'Bam' 
    FROM FinalTable F 
    WHERE F.Key(s) = T.Key(s) 
) IS NULL 

--Update Portion 
UPDATE FinalTable 
SET NonKeyColumn(s) = T.TempNonKeyColumn(s) 
FROM TempTable T 
WHERE FinalTable.Key(s) = T.Key(s) 
    AND CHECKSUM(FinalTable.NonKeyColumn(s)) <> CHECKSUM(T.NonKeyColumn(s)) 
+0

これはSQL 2005で行うのが良い方法ですが、データを削除するためのオプションの第3セクションを忘れないでください。ただし、SQL Server 2008には同様の機能を持つMERGEステートメントがあり、おそらく高速です。 – Korey

-1

が、私は通常、デルタマージを管理するためのSSISエンジンを聞かせすることを好みます。新しいアイテムのみが挿入され、変更されます。 重大なクエリを管理するのに十分なリソースがターゲットサーバーにない場合、この方法ではSSISサーバーのリソースを使用できます。

-1

私は 'ゆっくりと変化する次元'のタスクを使用します。