Предполагая, что поле ID является подходящей заменой и всегда увеличивается со временем (т. Е. Наименьшие значения ID являются самыми старыми, и это всегда так):
using (SqlConnection conn = new SqlConnection("yourconnectionstring"))
{
SqlCommand cmd = conn.CreateCommand(
"DELETE FROM table WHERE ID NOT IN (SELECT TOP 20 ID FROM table ORDER BY ID DESC)");
cmd.ExecuteNonQuery();
}
(синтаксис My C # может бытьнемного выключен - я сделал это из памяти - но запрос SQL должен быть в порядке.)