有条件地删除 SQL 行

Posted

技术标签:

【中文标题】有条件地删除 SQL 行【英文标题】:Conditionally delete SQL rows 【发布时间】:2013-03-13 14:35:08 【问题描述】:

在 Windows Phone 7.1 上使用 Linq 2 SQL CE,如何触发“DELETE FROM table_name WHERE some_column=some_value”SQL 命令?

不幸的是,即使在将“最大缓冲区大小”参数增加到 1024 之后,使用 Table.DeleteAllOnSubmit() 方法擦除项目的速度也非常慢:stupud Linq 会反序列化每条记录,因此 DataContext.SubmitChanges() 方法永远不会返回。

【问题讨论】:

【参考方案1】:

您无法触发所需的 DELETE 语句,但可以这样做:

使用 .Take(100) 仅 fetech 并在每个 SubmitChanges() 调用中删除一组记录,并循环运行,直到不再返回任何行。

使用 rowversion 列加快删除速度,在我的测试中从 320 毫秒到 70 毫秒以下 - 请参阅 http://erikej.blogspot.dk/2012/04/windows-phone-local-database-tip.html

【讨论】:

不幸的是,我有一个覆盖主索引列的二级索引。我会删除它,但是 Microsoft 的 DatabaseSchemaUpdater 没有用于从我的表中删除索引的 API :-( 但是你仍然可以使用 Take.. !? 是的 - 我会尽快尝试。非常感谢您的帮助。 Take() 将删除速度减慢了约 9%,以下是数据: 一次性:97 秒内 2033 个条目,58 秒内 1214 个条目 通过获取 128 条记录:2033 个条目105 秒,64.7 秒内 1214 个条目 2033 个条目在 14 秒内,1208 个条目在 3.98 秒内 - 好多了 :-) 非常感谢!顺便说一句,为了升级架构,我刚刚重命名了数据库文件。

以上是关于有条件地删除 SQL 行的主要内容,如果未能解决你的问题,请参考以下文章

SQL 使用 CASE 表达式有条件地选择行

使用 SQL Server DTS 包有条件地在目标表中插入/更新行

SQL有条件地选择非空行

有条件地删除重复的pandas python

有条件地删除重复的pandas python

如何在一组行之后或有条件地在没有 PL/SQL 块的情况下增加 oracle 序列?