如何在 C# 中仅删除距离当前日期超过 30 天的前 100 行?

How to delete only Top 100 rows which are older than 30 days from current date in C#?

当我执行以下查询时,它在 SSMS 中正确执行,但代码中的相同查询不会删除任何内容,并且 0 行受到数千行的影响。

代码执行无任何错误,也尝试了查询参数但没有成功。

Logs 是 table,DateCreated 是 DateTime 的列。 Sql 连接设置和其他内容正确。

SSMS 查询执行如下:

有人可以更正此代码查询吗?

                connection.Open();                                       
                SqlCommand cmd1 = new SqlCommand("delete TOP (100) from [Logs] WHERE DateCreated < GETDATE() - 30", connection);
          
                var number_of_rows_deleted = cmd1.ExecuteNonQuery();
                result = number_of_rows_deleted.ToString() + " records deleted";

当TOP与DELETE一起使用时,引用的行不按任何顺序排列,不能在该语句中直接指定ORDER BY子句。如果需要使用 TOP 按有意义的时间顺序删除行,则必须在 subselect 语句中使用 TOP 和 ORDER BY 子句

你的 sql 脚本应该是这样的

DELETE from [Logs] 
WHERE Id IN  
 (SELECT TOP(100) Id
   FROM Logs
   WHERE  DATEDIFF(day, DateCreated, GETDATE()) < 30
  Order By DateCreated )