1

My Source and Destination tables exist on different servers. I am using Execute SQL Task to write Merge Statements to synchronize them.

Could anyone explain how I can reference two different databases that exist on different servers inside my Execute SQL Task?

4

2 に答える 2

2

考えられるアプローチ:

2つのデータベースサーバー間でMERGEステートメントを使用する代わりに、次のアプローチをお勧めします。Execute SQL Task

アプローチ#1:

  • OLEDB Connection ManagersSQLServerインスタンスごとに2つ作成します。たとえば、SourceDBとDestinationDBの2つのデータベースがある場合、とという名前の2つの接続マネージャーを作成できOLEDB_SourceDBますOLEDB_DestinationDB。必要に応じて、ADO.NET接続マネージャーを使用することもできます。SSISベースの本で読んだ内容に基づくと、OLEDBはADO.NET接続マネージャーよりも優れたパフォーマンスを発揮します。

  • [制御フローData Flow Task]タブにをドラッグアンドドロップします。

  • データフロータスク内で、OLE DB Sourceソースデータベーステーブルからデータを読み取るようにを構成します。

  • Lookup Transformationソーステーブルと宛先テーブルの間の一意のキーを使用して、データが宛先テーブルにすでに存在するかどうかをチェックするために使用します。

  • ソーステーブルの行が宛先テーブルにある場合は、does not existを使用して行を宛先テーブルに挿入します。OLE DB Destination

  • 宛先テーブルにソーステーブルの行existsがある場合は、別のを使用して、宛先データベースのステージングテーブルに行を挿入しますOLE DB Destination

  • [制御フローExecute SQL Task]タブの[データフロータスク]の後に配置します。ステージングテーブルのデータを使用して、宛先テーブルのデータを更新するクエリを記述します。

詳細な手順については、以下のSOの質問に対する回答を確認してください。

SSISパッケージ内でアップサート(更新および挿入)操作を最適化するにはどうすればよいですか?

アプローチ#2:

  • OLEDB Connection ManagersSQLServerインスタンスごとに2つ作成します。たとえば、SourceDBとDestinationDBの2つのデータベースがある場合、とという名前の2つの接続マネージャーを作成できOLEDB_SourceDBますOLEDB_DestinationDB

  • [制御フローData Flow Task]タブにをドラッグアンドドロップします。

  • データフロータスク内で、OLE DB Sourceソースデータベーステーブルからデータを読み取り、を使用してステージングテーブルに挿入するようにを構成しOLE DB Destinationます。

  • [制御フロー]タブのExecute SQL Task後にを配置します。ステージングテーブルと宛先テーブルの間でMERGEステートメントを使用するクエリを記述します。Data Flow Task

于 2013-02-25T13:37:12.390 に答える
0

このリンクを参照してください - http://technet.microsoft.com/en-us/library/cc280522%28v=sql.105%29.aspx

基本的に、これを行うには、データ フロー タスクを使用して異なるサーバーから同じ場所にデータを取得し、SQL 実行タスクを実行してマージを行う必要があります。

Merge および Merge Join SSIS Data Flow タスクは、やりたいことを実行しているようには見えません。

于 2013-02-25T12:39:27.047 に答える