Một tùy chọn là tạo một bảng tạm thời trên máy chủ và sau đó sử dụng phương tiện tải hàng loạt để tải tất cả các ID vào bảng đó cùng một lúc. Sau đó, sử dụng mệnh đề join, EXISTS hoặc IN để chỉ xóa các bản ghi mà bạn đã tải lên bảng tạm thời của mình.
Tải hàng loạt là một đường dẫn được tối ưu hóa tốt trong SQL Server và nó sẽ rất nhanh.
Ví dụ:
- Thực thi câu lệnh
CREATE TABLE #RowsToDelete(ID INT PRIMARY KEY)
- Sử dụng tải hàng loạt để chèn các khóa vào
#RowsToDelete
- Thực thi
DELETE FROM myTable where Id IN (SELECT ID FROM #RowsToDelete)
- Thực thi
DROP TABLE #RowsToDelte
(bảng cũng sẽ tự động bị xóa nếu bạn đóng phiên)
Ví dụ về mã (Giả sử 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));