Salah satu opsi adalah membuat tabel temp di server dan kemudian menggunakan fasilitas pemuatan massal untuk mengunggah semua ID ke tabel itu sekaligus. Kemudian gunakan klausa join, EXISTS atau IN untuk menghapus hanya record yang Anda upload ke tabel temp Anda.
Pemuatan massal adalah jalur yang dioptimalkan dengan baik di SQL Server dan seharusnya sangat cepat.
Misalnya:
- Jalankan pernyataan
CREATE TABLE #RowsToDelete(ID INT PRIMARY KEY)
- Gunakan beban massal untuk memasukkan kunci ke dalam
#RowsToDelete
- Jalankan
DELETE FROM myTable where Id IN (SELECT ID FROM #RowsToDelete)
- Jalankan
DROP TABLE #RowsToDelte
(tabel juga akan otomatis dihapus jika Anda menutup sesi)
(Asumsikan Dapper) contoh kode:
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));