私は500000個のオブジェクトをデータベースに挿入していますが、その多くは同じです(データベースには同じ主キーの表現があります)が、他のフィールドは異なる可能性があります。問題は、オブジェクトがnull(ファイルから読めない)に設定されたいくつかのフィールドを持っていて、ある値のセットですでにデータベースに入っていることがあるため、nullに更新する=消去するということです。それはヌルではありませんか?ここでオプションのパラメータを指定したSqlアップデートコマンド?
は、私は今それをやっているかの簡単な例です:アップデート
private const string UpdateKun = "UPDATE pde.Kun SET [email protected] WHERE [email protected]";
private const string InsertKun = "INSERT INTO pde.Kun ([Licence], [Jmeno], [VykonnostniStupen]) VALUES (@Licence, @Jmeno, @VykonnostniStupen)";
var cmd = new SqlCommand(UpdateKun, conn, tran);
cmd.Parameters.AddWithValue("@Licence", kun.Licence);
cmd.Parameters.AddWithValue("@Jmeno", kun.Jmeno);
RepairNulls(cmd.Parameters);
if (cmd.ExecuteNonQuery() > 0) return;
cmd = new SqlCommand(InsertKun, conn, tran);
cmd.Parameters.AddWithValue("@Licence", kun.Licence);
cmd.Parameters.AddWithValue("@Jmeno", kun.Jmeno);
cmd.Parameters.AddWithValue("@VykonnostniStupen", 0);
RepairNulls(cmd.Parameters);
cmd.ExecuteNonQuery();
private void RepairNulls(SqlParameterCollection col)
{
foreach (SqlParameter param in col.Cast<SqlParameter>().Where(param => param.Value == null))
{
param.Value = DBNull.Value;
}
}
より大きいかどうかをチェック:そのA以来 'INSERT ... IF DUPLICATEのUPDATE ...' –
@ypercube 'SqlCommand'はSQL Serverです。それは2005年かそれ以上の間、それはマージだ –
ええ、私は本当にSQLにはないが、私はその機能を持っているはずだと思います:)私は、SQL Server 2008 Express Editionを使用して、私はマージシンタックスを検索します – MSkuta