Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Aktualizacja zbiorcza w C#

To, co zrobiłem wcześniej, to zbiorcze wstawienie danych do tabeli tymczasowej, a następnie użycie polecenia lub procedury składowanej, aby zaktualizować dane dotyczące tabeli tymczasowej z tabelą docelową. Tabela tymczasowa to dodatkowy krok, ale możesz uzyskać wzrost wydajności dzięki zbiorczemu wstawianiu i masowej aktualizacji, jeśli liczba wierszy jest duża, w porównaniu z aktualizacją danych wiersz po wierszu.

Przykład:

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

Zwróć uwagę, że do wykonania całej operacji używane jest pojedyncze połączenie, aby móc korzystać z tabeli temp w każdym kroku, ponieważ zakres tabeli temp jest przypadający na połączenie.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Klauzula WHERE lepiej wykonać przed IN i JOIN lub po

  2. WYBIERZ DLA XML AUTO i zwróć typy danych

  3. Wspólne wyrażenie tabeli, dlaczego średnik?

  4. Pogrupuj sql według versus different

  5. SQL Server v.Next:Wydajność STRING_AGG, część 2