Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Групова актуализация в C#

Това, което съм правил преди, е да изпълня групово вмъкване от данните във временна таблица и след това да използвам команда или съхранена процедура, за да актуализирам данните, свързани с временната таблица с таблицата местоназначение. Временната таблица е допълнителна стъпка, но можете да постигнете повишаване на производителността с групово вмъкване и масивна актуализация, ако количеството редове е голямо, в сравнение с актуализирането на данните ред по ред.

Пример:

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. Подзаявка, използваща Exists 1 или Exists *

  2. Какво е изчислена колона в SQL Server?

  3. Таблици със списък на SQL Server:Как да покажа всички таблици

  4. Как да махна таблица, ако съществува?

  5. Как мога да принудя рамката на обекта да вмъква колони за идентичност?