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

Prawidłowa metoda usuwania ponad 2100 wierszy (według ID) za pomocą Dapper

Jedną z opcji jest utworzenie tabeli tymczasowej na serwerze, a następnie użycie funkcji ładowania zbiorczego w celu jednoczesnego załadowania wszystkich identyfikatorów do tej tabeli. Następnie użyj klauzuli join, EXISTS lub IN, aby usunąć tylko rekordy, które przesłałeś do tabeli tymczasowej.

Ładunki zbiorcze są dobrze zoptymalizowaną ścieżką w SQL Server i powinny być bardzo szybkie.

Na przykład:

  1. Wykonaj instrukcję CREATE TABLE #RowsToDelete(ID INT PRIMARY KEY)
  2. Użyj ładowania zbiorczego, aby wstawić klucze do #RowsToDelete
  3. Wykonaj DELETE FROM myTable where Id IN (SELECT ID FROM #RowsToDelete)
  4. Wykonaj DROP TABLE #RowsToDelte (tabela zostanie również automatycznie usunięta, jeśli zamkniesz sesję)

(Zakładając Dapper) przykład kodu:

conn.Open();

var columnName = "ID";

conn.Execute(string.Format("CREATE TABLE #{0}s({0} INT PRIMARY KEY)", columnName));

using (var bulkCopy = new SqlBulkCopy(conn))
{
    bulkCopy.BatchSize = ids.Count;
    bulkCopy.DestinationTableName = string.Format("#{0}s", columnName);

    var table = new DataTable();                    
    table.Columns.Add(columnName, typeof (int));
    bulkCopy.ColumnMappings.Add(columnName, columnName);

    foreach (var id in ids)
    {
        table.Rows.Add(id);
    }

    bulkCopy.WriteToServer(table);
}

//or do other things with your table instead of deleting here
conn.Execute(string.Format(@"DELETE FROM myTable where Id IN 
                                   (SELECT {0} FROM #{0}s", columnName));

conn.Execute(string.Format("DROP TABLE #{0}s", columnName));


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Eksportuj tabelę do pliku z nagłówkami kolumn (nazwami kolumn) za pomocą narzędzia bcp i SQL Server 2008

  2. Uzyskać najbliższą długość i szerokość geograficzną z tabeli bazy danych MSSQL?

  3. Eliminacja przyłączeń:gdy SQL Server usuwa niepotrzebne tabele

  4. Jak mogę zobaczyć aktywne połączenia SQL Server?

  5. jak uzyskać daty rozpoczęcia i zakończenia wszystkich tygodni między dwiema datami w serwerze SQL?