1

2 つのデータベースがあります。それらの 1 つは CRM ソフトウェアに属し、ソースです。

もう 1 つは、私が開発しているツールが使用する宛先になります。

宛先にはADDRESSES、ソース データベース内の同じ名前のテーブルの列のサブセットを持つテーブルが含まれます。

これらのデータベース間でデータをコピーするための最良の (最も効率的な) 方法は何ですか (ちなみに、それが重要な場合、それらは異なる SQL Server インスタンス上にあります)。

ソースから取得した各行の宛先に INSERT を行うループを作成できますが、これは効率的ではないと思います。

私の考えと情報:

  • ソースから宛先への途中でデータが変更されることはありません
  • 戻る途中で変更されます
  • ソースの完全な構造はわかりませんが、必要なフィールドと、それらがソースにあることが保証されていることはわかっています (したがって、列のインデックスを使用してソースから取得した行にアクセスすることはできません)。
  • LINQ を使用できません。

ここで私を正しい方向に導くものは何でも感謝しています。

編集:
データをコピーするには、C# の方法が本当に必要です。また、コピーされた行をソースにマージする方法も知っておく必要があります。この行を次々と実行することは本当に必要ですか (またはベストプラクティスでさえありますか)?

4

4 に答える 4

2

なぜこれを行うコードを書くのでしょうか?

最速かつ最も簡単な方法は、SQL Server のユーティリティ(bcp.exe bcp:一括コピープログラム) を使用することです。

  • ソース サーバーからデータをエクスポートします。
  • 必要に応じて圧縮または tar してください。
  • 別のボックスに移動する必要がある場合は、必要な場所に FTP で転送します。
  • 宛先サーバーにインポートします。

同じことを、SQL Server Management Studio を介してさまざまな方法で実現できます。タスクを定義したら、保存してスケジュールすることができます。

SQL Server の Powershell オブジェクトを使用してこれを行うこともできます。

C# で実行する場合:

  • selectソース サーバーから必要なデータを取得するためのクエリを記述します。
  • それを実行し、出力を一時ファイルに入力します。
  • bulk insertデータを挿入するために、宛先サーバーに対してSQL Server のステートメントを実行します。

注:これらの手法のいずれについても、ターゲット テーブルに ID 列がある場合は、ID 列を処理する必要があります。キーの衝突にも対処する必要があります。最初に永久一時テーブルにデータを一括ロードしてから、必要な場所に移動するために前提条件の変換と操作を適用する方が簡単な場合があります。

于 2013-10-15T17:28:59.877 に答える
0

これらのデータベースが 2 つのサーバーに存在する場合は、sp_addlinkedserver を実行してサーバー間のリンクをセットアップできます。これをセットアップする手順はこちらにあります。これは、定期的にデータを「共有」する予定がある場合に便利です。

http://msdn.microsoft.com/en-us/library/ff772782.aspx

サーバーがリンクされると、単純な select ステートメントで、あるテーブルから別のテーブルに行をコピーできます。

INSERT INTO db1.tblA( Field1,Field2,Field2 ) SELECT Field1,Field2,Field2 FROM db2.tblB

データベースが同じインスタンス上にある場合は、上記と同様の SQL を実行するだけで済みます

于 2013-10-15T17:14:00.257 に答える