3

I have one database server, acting as the main SQL Server, containing a Table to hold all data. Other database servers come in and out (different instances of SQL Server). When they come online, they need to download data from main Table (for a given time period), they then generate their own additional data to the same local SQL Server database table, and then want to update the main server with only new data, using a C# program, through a scheduled service, every so often. Multiple additional servers could be generating data at the same time, although it's not going to be that many.

Main table will always be online. The additional non-main database table is not always online, and should not be an identical copy of main, first it will contain a subset of the main data, then it generates its own additional data to the local table and updates main table every so often with its updates. There could be a decent amount of number of rows generated and/or downloaded. so an efficient algorithm is needed to copy from the extra database to the main table.

What is the most efficient way to transfer this in C#? SqlBulkCopy doesn't look like it will work because I can't have duplicate entries in main server, and it would fail if checking constraints since some entries already exist.

4

4 に答える 4

0

これにリンクサーバーを使用できますか? はいの場合、メインサーバーとの間のデータのコピーがはるかに簡単になります。

データをメイン サーバーにコピーして戻すときは、各 INSERT ステートメントの前に IF EXISTS を使用して、さらに重複がないことを確認し、すべての挿入ステートメントをトランザクションにカプセル化して、エラーが発生した場合にトランザクションがロールバックされるようにします。

また、何か問題が発生した場合に被害を最小限に抑えることができるように、1000 レコード程度のバッチでこれを行うことに同意します。

于 2013-05-21T09:03:54.827 に答える
0

これが私がそれを行う方法です:

  1. メイン テーブルと同じ構造を持つユーザー定義のテーブル変数を受け取るメイン テーブル データベースにストアド プロシージャを作成します。

次のようなことをする必要があります-

INSERT INTO yourtable (SELECT * FROM tablevar)

MERGEまたは、挿入または更新機能にステートメントを使用できます。

  1. コードでは、(Windows サービス) セカンダリ テーブルからすべて (または一部) のデータを読み込み、それをテーブル変数としてストアド プロシージャに送信します。

  2. 1000 単位で一括して行うことができ、一括更新するたびに、ソース テーブル/ソース アップデータ コードでそれをマークする必要があります。

于 2013-05-20T21:24:27.660 に答える