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

SQL Wstawić dane w jednym lub wielu wierszach?

Właściwie sposób, w jaki to napisano, pierwsza opcja będzie szybsza.

  1. Twój drugi przykład ma w tym problem. Robisz sql =+ sql + itd. Spowoduje to utworzenie nowego obiektu tekstowego dla każdej iteracji pętli. (Sprawdź klasę StringBuilder). Technicznie rzecz biorąc, w pierwszej instancji również utworzysz nowy obiekt ciągu, ale różnica polega na tym, że nie trzeba będzie kopiować wszystkich informacji z poprzedniej opcji ciągu.

  2. Sposób, w jaki to skonfigurowałeś, SQL Server będzie musiał potencjalnie ocenić ogromne zapytanie, kiedy w końcu je wyślesz, co z pewnością zajmie trochę czasu, aby dowiedzieć się, co ma zrobić. Powinienem stwierdzić, że zależy to od tego, jak dużą liczbę wkładek musisz zrobić. Jeśli n jest małe, prawdopodobnie wszystko będzie dobrze, ale w miarę wzrostu problem będzie się tylko pogarszał.

Wstawianie zbiorcze jest szybsze niż pojedyncze ze względu na sposób, w jaki serwer SQL obsługuje transakcje wsadowe. Jeśli zamierzasz wstawić dane z C#, powinieneś zastosować pierwsze podejście i zawinąć powiedz co 500 wstawek do transakcji i zatwierdź ją, a następnie wykonaj następne 500 i tak dalej. Ma to również tę zaletę, że jeśli partia się nie powiedzie, możesz je uwięzić i dowiedzieć się, co poszło nie tak, i ponownie wstawić tylko te. Można to zrobić na inne sposoby, ale z pewnością byłoby to ulepszeniem w porównaniu z dwoma podanymi przykładami.

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. Jak sumować rachunki według długości kodu rachunku?

  2. CLR Strict Security w SQL Server 2017

  3. Jak obcinać wszystkie tabele w bazie danych za pomocą TSQL?

  4. Jak wykonać kopię zapasową i przywrócić bazę danych jako kopię na tym samym serwerze?

  5. Jak połączyć się z Microsoft SQL Server 2008 (MSSQL) z Matlaba?