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

SQL Вмъкване на един ред или няколко реда данни?

Всъщност, както сте го написали, първата ви опция ще бъде по-бърза.

  1. Във втория ви пример има проблем. Вие правите sql =+ sql + и т.н. Това ще доведе до създаването на нов низов обект за всяка итерация на цикъла. (Вижте класа StringBuilder). Технически, вие също ще създадете нов обект на низ в първия случай, но разликата е, че не е необходимо да копирате цялата информация от предишната опция за низ.

  2. Начинът, по който сте го настроили, SQL Server ще трябва потенциално да оцени масивна заявка, когато най-накрая я изпратите, което определено ще отнеме известно време, за да разберете какво трябва да прави. Трябва да кажа, че това зависи от това колко голям брой вмъквания трябва да направите. Ако n е малко, вероятно ще се оправите, но с нарастването проблемът ви само ще се влоши.

Груповите вмъквания са по-бързи от индивидуалните поради начина, по който SQL сървърът обработва пакетните транзакции. Ако възнамерявате да вмъкнете данни от C#, трябва да вземете първия подход и да увиете, да речем, всеки 500 вмъквания в транзакция и да я ангажирате, след това направете следващите 500 и така нататък. Това също има предимството, че ако партида се провали, можете да ги уловите и да разберете какво се е объркало и да вмъкнете отново само тях. Има и други начини да го направите, но това определено би било подобрение спрямо двата предоставени примера.

var iCounter = 0;
foreach (Employee item in employees)
{

   if (iCounter == 0)
  {
    cmd.BeginTransaction;
  }
  string sql = @"INSERT INTO Mytable (id, name, salary) 
    values ('@id', '@name', '@salary')";
  // replace @par with values
  cmd.CommandText = sql; // cmd is IDbCommand
  cmd.ExecuteNonQuery();
  iCounter ++;
  if(iCounter >= 500)
  {
     cmd.CommitTransaction;
     iCounter = 0;
  }
}

if(iCounter > 0)
   cmd.CommitTransaction;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Вмъкване в таблица.. exec на свързания сървър не работи

  2. Разрешаването на имена в низа за връзка е неуспешно от мрежовия дял

  3. PHP + SQL Server - Как да настроя набор от знаци за връзка?

  4. Как да декриптирате съхранена процедура в SQL Server 2008

  5. Архивиране на големи количества стари данни в SQL Server