1

サーバーA

Table1
Id  Name    State   Country
1   Abc OH  USA

Table2
Id  Counties    Places
1   abc     def
1   koi     koii
1   joi     joio

サーバーB

Table1
Id  Name    State   Country

Table2
Id  Counties    Places

両方のサーバーの下に 2 つのサーバー ServerA と ServerB があり、2 つのテーブル Table1/Table2 があります。Table1 から単一の行をコピーし、Table2 から関連する行を ServerB の Table1 と Table2 にコピーしようとしています。

これは私がそれをやってみた方法です:

connection1 = connection to ServerA
connection2 = connection to ServerB

SqlCommand cmd1 = new SqlCommand("Select * from Table1 where id = 1");
SqlCommand cmd2 = new SqlCommand("Select * from Table2 where id = 1");

Connection1.Open();
Connection2.Open();

SqlDataReader reader1 = cmd1.ExecuteReader();
SqlDataReader reader2 = cmd2.ExecuteReader();

var value1 = reader1.read();
var value2 = reader2.read();

上記のコマンドを使用SqlDataReaderして実行し、データを取得してに挿入しServerB Table1 and Table2ます。これは正しい方法ですか?より良い sql コマンドを使用できますか?

4

2 に答える 2

1

特に巨大なデータがある場合は、はるかに高速なSQLBULKCOPY (こちらの例を参照)を使用してみてください

于 2012-09-06T02:29:36.553 に答える
0

ほとんどのデータベースでは、他のデータベースに接続できます。特定の構文は、データベースに大きく依存しています。ただし、一度実行すると、次のようなことができます。

select *
into server2.<db2>.<schema2>.table2
from server1.<db>.<schema>.table1

また

create table server2.<db2>.table2 as
    select *
    from server1.<db>.table1

(構文はデータベースによって異なります。1 つ目は sql-server に似ており、2 つ目は oracle に似ています。)

データのサイズに制限がない場合は、リンク サーバーを使用するのが最善の方法です。それをメモリに読み込むと、一度に 1 行ずつ読み込んで挿入したくなるかもしれません。行数が数十を超える場合、この方法は必要以上に時間がかかることに気付くでしょう。

于 2012-09-05T20:31:02.970 に答える