मैंने पहले जो किया है वह डेटा से एक अस्थायी तालिका में थोक सम्मिलन करता है, और फिर गंतव्य तालिका के साथ अस्थायी तालिका से संबंधित डेटा को अद्यतन करने के लिए कमांड या संग्रहीत प्रक्रिया का उपयोग करता है। अस्थायी तालिका एक अतिरिक्त कदम है, लेकिन यदि पंक्ति के अनुसार डेटा पंक्ति को अपडेट करने की तुलना में पंक्तियों की मात्रा बड़ी है, तो आप बल्क इंसर्ट और बड़े पैमाने पर अपडेट के साथ प्रदर्शन लाभ प्राप्त कर सकते हैं।
उदाहरण:
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();
}
}
}
}
ध्यान दें कि प्रत्येक चरण में अस्थायी तालिका का उपयोग करने में सक्षम होने के लिए, पूरे ऑपरेशन को करने के लिए एक एकल कनेक्शन का उपयोग किया जाता है, क्योंकि अस्थायी तालिका का दायरा प्रति कनेक्शन है।