SQL Server 2008 R2を使用する同じサーバー上の2つの異なるデータベースに、同じスキーマを持つ2つのテーブルがあります。1つのテーブルがより頻繁にデータで更新されます。
ここで、これら2つのテーブルの同期を維持する必要があります。これは、夜間のプロセスとして発生する可能性があります。同期を実現するための最良の方法は何ですか。処理する ?
SQL Server 2008 R2を使用する同じサーバー上の2つの異なるデータベースに、同じスキーマを持つ2つのテーブルがあります。1つのテーブルがより頻繁にデータで更新されます。
ここで、これら2つのテーブルの同期を維持する必要があります。これは、夜間のプロセスとして発生する可能性があります。同期を実現するための最良の方法は何ですか。処理する ?
MERGE を使用するのが最善の策です。各条件を制御できます。一致した場合、不一致の場合など
例 A: トランザクションの使用法 - テーブル変数 - いいえ
DECLARE @Source TABLE (ID INT)
DECLARE @Target TABLE (ID INT)
INSERT INTO @Source (ID) VALUES (1),(2),(3),(4),(5)
BEGIN TRANSACTION
MERGE @Target AS T
USING @Source AS S
ON (S.ID = T.ID)
WHEN NOT MATCHED THEN
INSERT (ID) VALUES (S.ID);
ROLLBACK TRANSACTION
SELECT 'FAIL' AS Test,*
FROM @Target
例 B: トランザクションの使用法 - 物理テーブル
CREATE TABLE SRC (ID INT);
CREATE TABLE TRG (ID INT);
INSERT INTO SRC (ID) VALUES (1),(2),(3),(4),(5)
BEGIN TRANSACTION
MERGE TRG AS T
USING SRC AS S
ON (S.ID = T.ID)
WHEN NOT MATCHED THEN
INSERT (ID) VALUES (S.ID);
ROLLBACK TRANSACTION
SELECT 'FAIL' AS Test,*
FROM TRG
例 C: トランザクションの使用法 - Tempdb (ローカルおよびグローバル)
CREATE TABLE #SRC (ID INT);
CREATE TABLE #TRG (ID INT);
INSERT INTO #SRC (ID) VALUES (1),(2),(3),(4),(5)
BEGIN TRANSACTION
MERGE #TRG AS T
USING #SRC AS S
ON (S.ID = T.ID)
WHEN NOT MATCHED THEN
INSERT (ID) VALUES (S.ID);
ROLLBACK TRANSACTION
SELECT 'FAIL' AS Test,*
FROM #TRG
おそらく、SQL サーバーの tablediff.exe コマンド ライン ユーティリティを使用できます。2 つのテーブル間でテーブルごとの 1 回限りの比較を行い、dest をソースに同期するための SQL を自動的に生成できます。
作業をさらに簡単にする GUI ラッパーhttp://code.google.com/p/sqltablediff/もあります。コマンドラインが生成されます。
その後、スケジュールされたタスクを作成してコマンド ラインを実行し、生成された SQL スクリプトを実行できます。
さまざまなデータベースから選択し、カーソルを使用して選択したデータをループできます。そのカーソル内で、いくつかのロジックを実行し、ターゲット テーブルから更新または削除できます。
また、SQL 2008 には、1 つの T-SQL クエリで選択/挿入/更新するために使用できる優れた新しい MERGE ステートメントがあります。 http://technet.microsoft.com/en-us/library/bb510625%28v=sql.105%29.aspx
より複雑なプロセスについては、最初のオプションを使用します。より簡単な同期タスクについては、2 番目のオプションを使用します。
追加のオプションとして、サーバー統合サービス (SSIS) もあります: http://blogs.msdn.com/b/jorgepc/archive/2010/12/07/synchronize-two-tables-using-sql-server-integration- services-ssis-part-i-of-ii.aspx