c# - 如何在 C# 中仅删除距当前日期超过 30 天的前 100 行?
问题描述
当我执行以下查询时,它在 SSMS 中正确执行,但代码中的相同查询不会删除任何内容,并且 0 行受到数千行的影响。
代码执行没有任何错误,也尝试过查询参数但没有成功。
Logs 是表,DateCreated 是 DateTime 的列。Sql Connection设置和其他东西都正确。
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 )
推荐阅读
- highcharts - 海图 | 如何避免标签内的饼图重叠
- ansible - 有什么方法可以在清单列表中找到另一个主机并将其用于剧本中的某些任务作为价值?
- typescript - 根据我分配给根节点的类型,从根查询接收类型检查错误。GraphQL,打字稿。表达
- c# - How to add authentication to Azure storage blob upload
- javascript - 将 async 与 javascript forEach 一起使用
- performance - 我可以将 JMeter Standalone 文件转换为 GUI 文件吗?
- sql - Powershell dbatools - 使用 CMS 获取服务器名称
- python-3.x - 做 GRAD-CAM 时的“合并层”问题。如何在我的自定义功能模型中克服这个问题?
- excel - 将范围从 excel 和 pasteSpecial 复制到 word 时,我想在图片周围添加边框线
- python - 对数据框 pandas 中的选定数据进行分组