sql >> Database teknologi >  >> RDS >> Sqlserver

Masseopdatering i C#

Det, jeg har gjort før, er at udføre en masseindsættelse fra dataene i en midlertidig tabel og derefter bruge en kommando eller en lagret procedure til at opdatere dataene, der relaterer til den midlertidige tabel med destinationstabellen. Temp-tabellen er et ekstra trin, men du kan opnå en ydelsesforøgelse med masseindsættelsen og massiv opdatering, hvis antallet af rækker er stort, sammenlignet med at opdatere dataene række for række.

Eksempel:

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

Bemærk, at der bruges en enkelt forbindelse til at udføre hele operationen, for at kunne bruge temp-tabellen i hvert trin, fordi omfanget af temp-tabellen er pr. forbindelse.



  1. brug en variabel til tabelnavn i mysql sproc

  2. MySQL SOUNDEX() Eksempler

  3. Nyt i PostgreSQL 12:Genererede kolonner

  4. MySQL LOG2() Funktion – Returner base-2 logaritmen for en værdi