एक विकल्प सर्वर पर एक अस्थायी तालिका बनाना और फिर उस तालिका में सभी आईडी को एक साथ अपलोड करने के लिए बल्क लोड सुविधा का उपयोग करना है। फिर केवल अपने अस्थायी तालिका में अपलोड किए गए रिकॉर्ड को हटाने के लिए एक जॉइन, EXISTS या IN क्लॉज का उपयोग करें।
SQL सर्वर में बल्क लोड एक अच्छी तरह से अनुकूलित पथ है और यह बहुत तेज़ होना चाहिए।
उदाहरण के लिए:
- कथन निष्पादित करें
CREATE TABLE #RowsToDelete(ID INT PRIMARY KEY)
- एक बल्क लोड का उपयोग करके
#RowsToDelete
. में कुंजियाँ डालें - निष्पादित करें
DELETE FROM myTable where Id IN (SELECT ID FROM #RowsToDelete)
- निष्पादित करें
DROP TABLE #RowsToDelte
(यदि आप सत्र बंद करते हैं तो तालिका भी स्वतः ही हटा दी जाएगी)
(डैपर मानते हुए) कोड उदाहरण:
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));