Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

सी # में थोक अद्यतन

मैंने पहले जो किया है वह डेटा से एक अस्थायी तालिका में थोक सम्मिलन करता है, और फिर गंतव्य तालिका के साथ अस्थायी तालिका से संबंधित डेटा को अद्यतन करने के लिए कमांड या संग्रहीत प्रक्रिया का उपयोग करता है। अस्थायी तालिका एक अतिरिक्त कदम है, लेकिन यदि पंक्ति के अनुसार डेटा पंक्ति को अपडेट करने की तुलना में पंक्तियों की मात्रा बड़ी है, तो आप बल्क इंसर्ट और बड़े पैमाने पर अपडेट के साथ प्रदर्शन लाभ प्राप्त कर सकते हैं।

उदाहरण:

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();
            }
        }
    }
}

ध्यान दें कि प्रत्येक चरण में अस्थायी तालिका का उपयोग करने में सक्षम होने के लिए, पूरे ऑपरेशन को करने के लिए एक एकल कनेक्शन का उपयोग किया जाता है, क्योंकि अस्थायी तालिका का दायरा प्रति कनेक्शन है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर उपयोग के लिए Azure वर्चुअल मशीनें

  2. मैं PHP के साथ काम करने के लिए SQLSRV एक्सटेंशन कैसे प्राप्त करूं, क्योंकि MSSQL पदावनत है?

  3. SQL सर्वर में sp_depends का उपयोग न करें (यह पदावनत है)

  4. WHERE col IN (...) कंडीशन पर सीमा

  5. M1 Mac (ARM64) पर SQL सर्वर कैसे स्थापित करें