2

次の状況は次のとおりです。別のサーバーのStudentsBにある別のテーブルと同期する必要があるStudentsAのテーブルがあります。これは、A から B への一方向の同期です。テーブル StudentsA は多数の行を保持できるため、StudentsA からの最後のコピー以降に変更された StudentsA の ID を含む StudentsSync (入力サーバー上) というテーブルあります学生へB .

次の SSIS データ フロー タスクを作成しました。

ここに画像の説明を入力

唯一の問題は、コピーまたは更新が成功した後に、StudentsSyncから行を削除する必要があることです。このようなもの:

ここに画像の説明を入力

これをどのように達成できるか考えていますか?

4

2 に答える 2

1

3つの方法で実現できます

1.targetテーブルに OutputDB次のTimeStampような 列がCreateあり、単純なクエリを作成することで取得または取得できるmodified TimeStamp行がある場合。以下のクエリをTableの行に書き込む必要があります。updatedinsertedexecte sql taskControl FlowdeleteSync

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すると仮定します。上記の条件は基本的にチェックします。ある場合は列に日付があり、そうでない場合は値が現在の日付になりますSyncprimary keyTargetnew rowaddedCreateTimeStampcurrentmodifiedTimeStampnullupdatedmodifiedTimeStamp

上記のクエリは、データをロードする場合にそこにあるはず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接続し、別のマルチキャストに接続しますMULTICASTlookmatchLookup No match output

ここに画像の説明を入力

于 2013-03-29T11:51:16.700 に答える
0
  1. 「既存のエントリの更新」の後と「新しいエントリの挿入」の後にタスクを追加して、削除する ID のリストを含む変数に学生 ID を追加します。
  2. すべてのタスクをシーケンス コンテナーに含めます。
  3. シーケンス コンテナーの実行後、データを入力した変数にある同期テーブルからすべてのレコードを削除するタスクを追加します。
于 2013-03-29T11:31:02.537 に答える