我正在处理大量数据,并使用 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)。