18

SQL Server 2008 R2を使用する同じサーバー上の2つの異なるデータベースに、同じスキーマを持つ2つのテーブルがあります。1つのテーブルがより頻繁にデータで更新されます。

ここで、これら2つのテーブルの同期を維持する必要があります。これは、夜間のプロセスとして発生する可能性があります。同期を実現するための最良の方法は何ですか。処理する ?

4

3 に答える 3

18

MERGE を使用するのが最善の策です。各条件を制御できます。一致した場合、不一致の場合など

マージ - Technet

マージ - MSDN (GOOD!)

例 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
于 2012-11-28T23:02:53.613 に答える
7

おそらく、SQL サーバーの tablediff.exe コマンド ライン ユーティリティを使用できます。2 つのテーブル間でテーブルごとの 1 回限りの比較を行い、dest をソースに同期するための SQL を自動的に生成できます。

作業をさらに簡単にする GUI ラッパーhttp://code.google.com/p/sqltablediff/もあります。コマンドラインが生成されます。

その後、スケジュールされたタスクを作成してコマンド ラインを実行し、生成された SQL スクリプトを実行できます。

于 2013-05-30T00:02:12.927 に答える
1

さまざまなデータベースから選択し、カーソルを使用して選択したデータをループできます。そのカーソル内で、いくつかのロジックを実行し、ターゲット テーブルから更新または削除できます。

また、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

于 2012-11-28T20:46:01.607 に答える