如何在 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 )
当我执行以下查询时,它在 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 )