sql >> Database teknologi >  >> RDS >> Sqlserver

Korrekt metode til at slette over 2100 rækker (efter ID) med Dapper

En mulighed er at oprette en midlertidig tabel på serveren og derefter bruge bulk load-faciliteten til at uploade alle ID'er til den tabel på én gang. Brug derefter en join-, EXISTS- eller IN-klausul til kun at slette de poster, du har uploadet til din midlertidige tabel.

Massebelastninger er en veloptimeret sti i SQL Server, og den burde være meget hurtig.

For eksempel:

  1. Udfør sætningen CREATE TABLE #RowsToDelete(ID INT PRIMARY KEY)
  2. Brug en massebelastning til at indsætte nøgler i #RowsToDelete
  3. Udfør DELETE FROM myTable where Id IN (SELECT ID FROM #RowsToDelete)
  4. Udfør DROP TABLE #RowsToDelte (tabellen vil også automatisk blive slettet, hvis du lukker sessionen)

(Forudsat Dapper) kodeeksempel:

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. Resultatcache

  2. Hvordan opretter man en SQL-visning med SQLAlchemy?

  3. PERIOD_DIFF() Eksempler – MySQL

  4. Udfyld manglende datoer for SQL Server-forespørgselsoutput ved hjælp af CTE