sql >> Databáze >  >> RDS >> Sqlserver

Hromadná aktualizace v C#

Dříve jsem provedl hromadné vložení dat do dočasné tabulky a poté pomocí příkazu nebo uložené procedury aktualizoval data související s dočasnou tabulkou s cílovou tabulkou. Dočasná tabulka je krok navíc, ale můžete dosáhnout zvýšení výkonu s hromadným vkládáním a masivní aktualizací, pokud je počet řádků velký, ve srovnání s aktualizací dat řádek po řádku.

Příklad:

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

Všimněte si, že k provedení celé operace se používá jediné připojení, aby bylo možné použít dočasnou tabulku v každém kroku, protože rozsah dočasné tabulky je na připojení.



  1. Proaktivní monitorování MySQL (Developer Studio/Advisors Angle)

  2. GROUP BY a agregovat sekvenční číselné hodnoty

  3. Lepší techniky pro ořezávání úvodních nul v SQL Server?

  4. Pomalý start MySQL v režimu GTID? Problémem může být velikost binárního souboru protokolu