SQL Server 2008で実行するSSISパッケージを作成しています.SSISでどのようにUPSERTを実行しますか?UPSERT in SSIS
IF KEY NOT EXISTS INSERT ELSE IF DATA CHANGED UPDATE ENDIF ENDIF
SQL Server 2008で実行するSSISパッケージを作成しています.SSISでどのようにUPSERTを実行しますか?UPSERT in SSIS
IF KEY NOT EXISTS INSERT ELSE IF DATA CHANGED UPDATE ENDIF ENDIF
私は、SQL ServerのupsertでMat Stephenのウェブログを見ることをお勧めします。
年間にわたって使用されてきた基本的なデータ操作言語(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及び表2Table_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を実行」タスクを追加し、そこにコードを配置する必要があるすべて。
SQL Server 2008 - Using Merge From SSISを参照してください。私はこのようなものを実装しました。とても簡単でした。 BOLのページInserting, Updating, and Deleting Data using MERGEを使用するだけで、私を動かすことができました。
私は確認、マージは行く方法です。ここKimballで読む:http://www.kimballgroup。com/html/08dt/KU107_UsingSQL_MERGESlowlyChangingDimension.pdf –
kimballgroupのリンクが無効です。 – Kyle
(あなたは前段階または段階のテーブルを持っている場合)、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))
これはSQL 2005で行うのが良い方法ですが、データを削除するためのオプションの第3セクションを忘れないでください。ただし、SQL Server 2008には同様の機能を持つMERGEステートメントがあり、おそらく高速です。 – Korey
が、私は通常、デルタマージを管理するためのSSISエンジンを聞かせすることを好みます。新しいアイテムのみが挿入され、変更されます。 重大なクエリを管理するのに十分なリソースがターゲットサーバーにない場合、この方法ではSSISサーバーのリソースを使用できます。
私は 'ゆっくりと変化する次元'のタスクを使用します。
Txです。 T-SQLコマンドに対応するSSISはありますか?ウォークスルーは非常に便利です。 (noob) –
リンクが死んでいるようです。試してみてくださいhttp://blogs.technet.com/mat_stephen/archive/2005/08/31/410022.aspx – Rydell