3つの方法で実現できます
1.target
テーブルに OutputDB
次のTimeStamp
ような 列がCreate
あり、単純なクエリを作成することで取得または取得できるmodified TimeStamp
行がある場合。以下のクエリをTableの行に書き込む必要があります。updated
inserted
execte sql task
Control Flow
delete
Sync
Delete from SyncTable
where keyColumn in (Select primary_key from target
where ModifiedTimeStamp >= GETDATE() or (ModifiedTimeStamp is null
and CreateTimeStamp>=GETDATE()))
私はテーブルのテーブルと一緒にテーブルに存在StudentsA's
primary key
すると仮定します。上記の条件は基本的にチェックします。ある場合は列に日付があり、そうでない場合は値が現在の日付になりますSync
primary key
Target
new row
added
CreateTimeStamp
current
modifiedTimeStamp
null
updated
modifiedTimeStamp
上記のクエリは、データをロードする場合にそこにあるはずTimeStamp
の列がtarget
テーブルにある場合に機能しますData Warehouse
2.MERGE
構文を使用して更新を実行し、で挿入Control Flow
できます。Execute SQL Task
使用する必要Data Flow Task
はありません。以下のクエリは、何も持っていなくても使用できますTimeStamp columns
DECLARE @Output TABLE ( ActionType VARCHAR(20), SourcePrimaryKey INT)
MERGE StudentsB AS TARGET
USING StudentsA AS SOURCE
ON (TARGET.CommonColumn = SOURCE.CommonColumn)
WHEN MATCHED
THEN
UPDATE SET TARGET.column = SOURCE.Column,TARGET.ModifiedTimeStamp=GETDATE()
WHEN NOT MATCHED BY TARGET THEN
INSERT (col1,col2,Col3)
VALUES (SOURCE.col1, SOURCE.col2, SOURCE.Col3)
OUTPUT $action,
INSERTED.PrimaryKey AS SourcePrimaryKey INTO @Output
Delete from SyncTable
where PrimaryKey in (Select SourcePrimaryKey from @Output
where ActionType ='INSERT' or ActionType='UPDATE')
時間がないため、コードはテストされていませんが、少なくとも、続行する方法についてはかなりのアイデアが得られるはずです。.構文の詳細については、これとこれMERGE
を読んでください
3.Multicast
コンポーネントをduplicate
データセットに使用し、Insert
出力にUpdate
接続し、別のマルチキャストに接続しますMULTICAST
lookmatch
Lookup No match output
