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

Правилен метод за изтриване на над 2100 реда (по ID) с Dapper

Една от опциите е да създадете временна таблица на сървъра и след това да използвате инструмента за групово зареждане, за да качите всички идентификатори в тази таблица наведнъж. След това използвайте клауза за присъединяване, EXISTS или IN, за да изтриете само записите, които сте качили във вашата временна таблица.

Масовите зареждания са добре оптимизиран път в SQL Server и трябва да е много бърз.

Например:

  1. Изпълнете оператора CREATE TABLE #RowsToDelete(ID INT PRIMARY KEY)
  2. Използвайте групово натоварване, за да вмъкнете ключове в #RowsToDelete
  3. Изпълнете DELETE FROM myTable where Id IN (SELECT ID FROM #RowsToDelete)
  4. Изпълнете DROP TABLE #RowsToDelte (таблицата също ще бъде отпаднала автоматично, ако затворите сесията)

(Да приемем, че Dapper) пример за код:

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. Бързо вмъкнете 2 милиона реда в SQL Server

  2. Поправете „Грешка при аритметично препълване при преобразуване на IDENTITY в тип данни…“ в SQL Server

  3. SQL Server заявка за намиране на всички разрешения/достъп за всички потребители в база данни

  4. Прозрачно криптиране на данни (TDE) в SQL Server в група за наличност на AlwaysOn в пример

  5. Инсталиране на клъстер за отказване на SQL сървър -4