以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]如何从后台删除SQL数据库大量行?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=169187)

--  作者:明天的灵
--  发布时间:2021/6/5 23:53:00
--  [求助]如何从后台删除SQL数据库大量行?
帮助中例子http://www.foxtable.com/webhelp/topics/2899.htm

在DataTable中一次性删除大量的行,然后保存,效率是比较低的。
我们可以用
SQLDeleteFor直接从后台删除符合条件的行,然后用RemoveFor从DataTable移除符合条件的行,效率会提高很多,例如:

DataTables("表A").SQLDeleteFor("产品编号 = 1")
DataTables
("表A").RemoveFor("产品编号 = 1")


这里只有一个条件,一行数据。如果条件改为删除所有与表B列“产品编号”相同的产品,不知道如何写,请指点

[此贴子已经被作者于2021/6/6 0:01:50编辑过]

--  作者:明天的灵
--  发布时间:2021/6/6 11:39:00
--  
采用遍历表B记录可以吗?
Dim dd As Integer \'产品编号为整数型
For
 Each dr As DataRow In DataTables("表B").DataRows
    dd  = dr(
"产品编号")
     DataTables("表A").SQLDeleteFor("产品编号 = “ & dd )
     DataTables
("表A").RemoveFor("产品编号 = “ & dd)
Next

--  作者:有点蓝
--  发布时间:2021/6/6 20:28:00
--  
DataTables("表A").SQLDeleteFor("产品编号 in (select 产品编号 from {表B}))
DataTables("表A").Load

--  作者:明天的灵
--  发布时间:2021/6/6 21:14:00
--  
谢谢,简洁多了
--  作者:明天的灵
--  发布时间:2021/6/8 22:56:00
--  
DataTables("表A").SQLDeleteFor("编号 in (Select 编号 fro m {表B})")
DataTables("表A").Load
上面代码执行时,出错:
语法错误。 在查询表达式 \'编号 in (Sel ect 编号 fro m {表B})\' 中。


--  作者:有点蓝
--  发布时间:2021/6/8 23:14:00
--  
应该是个bug,明天反馈一下,使用sql处理吧

delete from {表A} where 编号 in (Select 编号 from {表B})

--  作者:明天的灵
--  发布时间:2021/6/8 23:46:00
--  
谢谢