あるデータベースのデータを別のデータベースに一括コピーまたは更新する

.net bulkinsert bulkupdate c# sqlbulkcopy

質問

次の基準を使用して、データベース間で一括してデータをコピーまたは更新したいと考えています。

  • バーコード列に基づいてデータ行がまだ存在しない場合はコピーする
  • バーコード列データがすでに存在する場合は、接続先データベースの現在のデータ行を更新します。

これは私のコードで、ローカルデータベースからデータを取得し、それを中央データベースにBulkCopyします。コードにこれらの条件を追加するにはどうすればよいですか?

string localConnectionString = GetLocalConnection();
string sqlConnectionStringNP01 = GetNP01Connection();

using (DataTable dt = new DataTable())
{
    using (SqlConnection conn = new SqlConnection(localConnectionString))
    using (SqlCommand cmd = new SqlCommand(sql, conn))
    using (SqlDataAdapter adapter = new SqlDataAdapter(cmd))
    {
        // Getting Local DB Data
        cmd.CommandType = commandType;
        cmd.Connection.Open();

        adapter.SelectCommand.CommandTimeout = 240;
        adapter.Fill(dt);
        adapter.Dispose();
    }

    // Copying to Central Database
    using (SqlConnection conn2 = new SqlConnection(sqlConnectionStringNP01))
    {
        conn2.Open();

        using (SqlBulkCopy copy = new SqlBulkCopy(conn2))
        {
            // I want to add the code to do the checking here if possible
            copy.DestinationTableName = destinationTable;
            copy.BatchSize = 1000;
            copy.BulkCopyTimeout = 240;
            copy.WriteToServer(dt);
            copy.NotifyAfter = 1000;

            MessageBox.Show("Data successfully transfered to Central Database", "Success!", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
    }
}

エキスパート回答

@ Jeroenがコメントに書いたように、 SqlBulkCopyは挿入することしかできません。

ただし、一時テーブルに挿入して、宛先テーブルにMERGEステートメントを実行するSQLを作成することもできます。

免責事項 :私はプロジェクトバルクオペレーションのオーナーです

このライブラリは無料ではありませんが、あなたが探しているBulkMergeオプションを提供しています。

using (BulkOperation copy = new BulkOperation(conn2))
{
    copy.DestinationTableName = destinationTable;
    copy.BatchSize = 1000;
    copy.BatchTimeout = 240;
    copy.BulkMerge(dt);

    MessageBox.Show("Data successfully transfered to Central Database", "Success!", MessageBoxButtons.OK, MessageBoxIcon.Information);
}


ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ