Những gì tôi đã làm trước đây là thực hiện chèn hàng loạt từ dữ liệu vào bảng tạm thời, sau đó sử dụng lệnh hoặc thủ tục được lưu trữ để cập nhật dữ liệu liên quan bảng tạm thời với bảng đích. Bảng tạm thời là một bước bổ sung, nhưng bạn có thể tăng hiệu suất với chèn hàng loạt và cập nhật hàng loạt nếu số lượng hàng lớn, so với việc cập nhật dữ liệu từng hàng.
Ví dụ:
public static void UpdateData<T>(List<T> list,string TableName)
{
DataTable dt = new DataTable("MyTable");
dt = ConvertToDataTable(list);
using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["SchoolSoulDataEntitiesForReport"].ConnectionString))
{
using (SqlCommand command = new SqlCommand("", conn))
{
try
{
conn.Open();
//Creating temp table on database
command.CommandText = "CREATE TABLE #TmpTable(...)";
command.ExecuteNonQuery();
//Bulk insert into temp table
using (SqlBulkCopy bulkcopy = new SqlBulkCopy(conn))
{
bulkcopy.BulkCopyTimeout = 660;
bulkcopy.DestinationTableName = "#TmpTable";
bulkcopy.WriteToServer(dt);
bulkcopy.Close();
}
// Updating destination table, and dropping temp table
command.CommandTimeout = 300;
command.CommandText = "UPDATE T SET ... FROM " + TableName + " T INNER JOIN #TmpTable Temp ON ...; DROP TABLE #TmpTable;";
command.ExecuteNonQuery();
}
catch (Exception ex)
{
// Handle exception properly
}
finally
{
conn.Close();
}
}
}
}
Lưu ý rằng một kết nối duy nhất được sử dụng để thực hiện toàn bộ hoạt động, để có thể sử dụng bảng tạm trong mỗi bước, vì phạm vi của bảng tạm là mỗi kết nối.