2012-04-19 10 views
3

現在、SSISデータのロード中にTableDiffユーティリティを使用して、ステージングテーブル(更新する最新のデータを持つ - 挿入/更新/削除)から実稼働中のライブテーブルを更新しています。SQL Server 2008のTableDiffユーティリティの代替方法は何ですか?

しかし、TableDiffは差異を特定し、そのジョブが更新に使用するSQLスクリプトを作成するのにかなりの時間がかかります(数時間から数千回の更新行を約100,000回の更新行数日かかる)。

SQL Server 2008でTableDiffユーティリティを使用した方が良いでしょうか、それともプロセスやアイデアが優れているのでしょうか?

更新: 両方の製品/ユーティリティのオプションをお探しだけでなく、より良いアルゴリズムを作ってそれより速く

+1

重要な問題。私は数日前にこのような状況に直面しました。私はステージングテーブルで 'Timestamp'(または任意のFlag)の余分な列を使用しました。宛先テーブルにデータをロードするときは、 'Timestamp'(またはFlag)をチェックします。データが完全にロードされた後、列(タイムスタンプまたはフラグ)を更新します。このシナリオでは、 'Deleted'データを追跡する必要がないので、うまくいきました。 –

答えて

2

を行うAtlantisツール

を使うのか?私はDTSでこのアプローチを使用していました。

+0

いくつかの良い例を挙げてください。ありがとう。 – psam

+0

こんにちは。 Googleは私にこれを持って来ましたhttp://www.sqlservercentral.com/articles/EDW/77100/ それはMERGEステートメントの良い説明があります。最初にManagement Studioを使用して開発データベースに接続し、クエリウィンドウを開き、ステージと目的地テーブルのMERGEコマンドを試してみることをお勧めします。利点がある場合は、SSISに統合します。上記のリンクでは、このためにストアドプロシージャを作成する必要はなく、MERGEステートメントを直接SQL実行タスクに入れることができます。 – satcat66

+0

http://technet.microsoft.com/en-us/library/cc280522(v=sql.105).aspx – satcat66

1

私はレッドゲートのSQLデータを比較お勧めしたいが、それは少し高価です。 (無料試用版があればそれをチェックしてください)

0

RedGateがおそらく最適です。

私は時々彼らは非常に重いですが、その中にMERGE文でストアドプロシージャを呼び出すことはここではオプションではありません、なぜ自分の仕事

関連する問題