sql >> Databáze >  >> RDS >> Sqlserver

Správná metoda odstranění více než 2100 řádků (podle ID) pomocí Dapper

Jednou z možností je vytvořit dočasnou tabulku na serveru a poté použít hromadné načtení k nahrání všech ID do této tabulky najednou. Poté použijte klauzuli join, EXISTS nebo IN k odstranění pouze záznamů, které jste nahráli do vaší dočasné tabulky.

Hromadné načítání je dobře optimalizovaná cesta na SQL Server a měla by být velmi rychlá.

Například:

  1. Proveďte příkaz CREATE TABLE #RowsToDelete(ID INT PRIMARY KEY)
  2. K vložení klíčů do #RowsToDelete použijte hromadné načtení
  3. Proveďte DELETE FROM myTable where Id IN (SELECT ID FROM #RowsToDelete)
  4. Spusťte DROP TABLE #RowsToDelte (stůl bude také automaticky zrušen, pokud relaci zavřete)

(Za předpokladu, že Dapper) příklad kódu:

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. Vyberte sloupce ze sady výsledků uložené procedury

  2. Jak nainstalovat balíček Python na Linux tak, aby byl nalezen již fungujícím rozšířením PostgreSQL 13 plpython3u?

  3. Upgrade datové platformy SQL Server v roce 2015

  4. SQL Server 2017:Kopírování dat SQL Server z Linuxu do Windows pomocí SSIS