2

プロセス

  1. データベース A の SQL テーブルから 400 万件のレコード (ID) を取得する必要がある C# アプリケーションを作成しています。
  2. 次に、各 ID を使用して、データベース B の別の SQL テーブルからそれぞれレコードの行を選択する必要があります。
  3. この行を取得したら、データベース C の別の SQL テーブルを更新する必要があります

質問

  1. ステップ 1 でデータを取得して保存する最も効率的な方法はどれですか? を。これをリスト文字列にロードする必要がありますか? b. 最初にバッチを実行することをお勧めしますか?

  2. ステップ 2 と 3 を達成するための最も効率的な方法は何ですか?

4

2 に答える 2

0

使用する4Mレコードを取得するには、SqlDataReader一度に1行のデータのみをメモリにロードします。

var cn = new SqlConnection("some connection string");
var cmd = new SqlCommand("SELECT ID FROM SomeTable", cn);
var reader = cmd.ExecuteReader();

while (reader.Read())
{
    var id = reader.GetInt32(0);

    // an so on
}

reader.Close();
reader.Dispose();
cn.Close();

ここで、2つと3つを処理するDataTableために、取得する必要のある行にaを使用し、次にSqlCommand3番目のデータベースにaを使用します。これは、ステートメントに対してaをaで埋め、に対してaを発行することで、内部でreader.Read()必要な1つの行を取得できることを意味します。DataTableSqlDataAdapterExecNonQuerySqlCommandUPDATE

上記を書く別の方法で、少し安全ですが、次のusingステートメントを使用することです。

using (SqlDataReader reader = cmd.ExecuteReader())
{
    while (reader.Read())
    {
        var id = reader.GetInt32(0);

        // an so on
    }
}

これにより、次の必要がなくなります。

reader.Close();
reader.Dispose();

したがって、必要に応じてそれを発行することもできSqlConnectionます。

于 2013-03-12T17:47:19.840 に答える
0

SQLBulkCopy クラスが役立つ場合があります。

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy.aspx

于 2013-03-12T17:49:43.673 に答える