Een optie is om een tijdelijke tabel op de server te maken en vervolgens de bulklaadfunctie te gebruiken om alle ID's in één keer naar die tabel te uploaden. Gebruik vervolgens een join-, EXISTS- of IN-clausule om alleen de records te verwijderen die u naar uw tijdelijke tabel hebt geüpload.
Bulkladingen zijn een goed geoptimaliseerd pad in SQL Server en het zou erg snel moeten zijn.
Bijvoorbeeld:
- Voer de instructie uit
CREATE TABLE #RowsToDelete(ID INT PRIMARY KEY)
- Gebruik een bulklading om sleutels in te voegen in
#RowsToDelete
- Voer
DELETE FROM myTable where Id IN (SELECT ID FROM #RowsToDelete)
- Voer
DROP TABLE #RowsToDelte
(de tafel wordt ook automatisch verwijderd als u de sessie sluit)
(Ervan uitgaande dat Dapper) codevoorbeeld:
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));