Една от опциите е да създадете временна таблица на сървъра и след това да използвате инструмента за групово зареждане, за да качите всички идентификатори в тази таблица наведнъж. След това използвайте клауза за присъединяване, EXISTS или IN, за да изтриете само записите, които сте качили във вашата временна таблица.
Масовите зареждания са добре оптимизиран път в SQL Server и трябва да е много бърз.
Например:
- Изпълнете оператора
CREATE TABLE #RowsToDelete(ID INT PRIMARY KEY)
- Използвайте групово натоварване, за да вмъкнете ключове в
#RowsToDelete
- Изпълнете
DELETE FROM myTable where Id IN (SELECT ID FROM #RowsToDelete)
- Изпълнете
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));