私は膨大なデータセットに取り組んでおり、CLR を使用して処理しています。CLR 処理は迅速に機能していますが、処理されたデータを (CLR を介して) データベースにすばやく移動する方法が必要です。
たとえば、次の clr コードを参照してください。
protected static string Normalize(string s) // space and special character remover
{
char[] arr = s.ToCharArray();
arr = Array.FindAll<char>(arr, (c => char.IsLetterOrDigit(c)));
return new string(arr).ToLower();
}
[Microsoft.SqlServer.Server.SqlProcedure]
public static void udpNormStr ()
{
SqlConnection con = new SqlConnection("context connection = true");
SqlCommand cmd = new SqlCommand("Select cName from NamesTable", con);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
DataTable fill = new DataTable();
fill.Columns.Add("NormName", typeof(string));
da.Fill(dt);
cmd.CommandText = "insert into NormTable values (@nName)";
cmd.Parameters.Add("@nName", SqlDbType.VarChar);
foreach (DataRow row in dt.Rows)
{
fill.Rows.Add(Normalize(row[0].ToString()));
}
con.Open();
foreach (DataRow row in fill.Rows)
{
cmd.Parameters["@nName"].Value = row[0];
cmd.ExecuteNonQuery();
}
con.Close();
}
実行に多くの時間がかかり、その時間の 90% が挿入操作で無駄になっています。処理されたデータをデータベースに移動するより良い方法を提案してください(CLRを介して)。