以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  SQLServer数据源,如何查重身份证?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=128307)

--  作者:pc005637
--  发布时间:2018/12/3 15:29:00
--  SQLServer数据源,如何查重身份证?
例子:一个表,有"身份证号码" 和 “查重” 列。

目前代码:
dim t as table = Tables("Table1")
For Each r As Row In t.Rows
    If r("身份证号码") > "" Then
         r("查重") = t.DataTable.SQLCompute("Count(*)","身份证号码 = \'" & r("身份证号码") & "\'")
    End If
Next

当数据量少时,影响不大。当后台数据表,有10+万条数据时,消耗时间有点难以接受。
能否有更好的方式,让数据尽量全部在数据库里面计算。因为网络环境也不是太好。

--  作者:有点甜
--  发布时间:2018/12/3 15:43:00
--  

1、sqlCompute计算1条数据,大概是0.5秒,你table1如果有100行,需要50秒处理。

 

2、如果你需要重复多次查询,还是建议把所有数据加载出来,再用compute或者find查询。


--  作者:pc005637
--  发布时间:2018/12/3 15:49:00
--  回复
测试过,将数据加载在表里面,用compute语句,也是很慢。有没有,全部在后台处理的方式?

只是一次性查询。查出重复的数据。
[此贴子已经被作者于2018/12/3 15:50:11编辑过]

--  作者:有点甜
--  发布时间:2018/12/3 16:21:00
--  
以下是引用pc005637在2018/12/3 15:49:00的发言:
测试过,将数据加载在表里面,用compute语句,也是很慢。有没有,全部在后台处理的方式?

只是一次性查询。查出重复的数据。
[此贴子已经被作者于2018/12/3 15:50:11编辑过]

 

1、加载后,用compute,不可能慢。比如你在项目打开的时候加载了全部数据,然后compute查找100行,肯定瞬间完成。

 

2、你也可以这样做:循环每一行,合成一个查询条件,如 身份证 in (\'123\', \'456\', \'789\') ,然后用sqlcommand查找返回一个临时表,然后对比这个临时表即可。


--  作者:pc005637
--  发布时间:2018/12/3 17:09:00
--  能否这样?
cm d.Command Text = "UP DATE {表名} SE T 查重 = (Select Count(*) F rom {表名} 身份证号码 = ......
这样子的SQL语句,在后台处理?

语句不会写。

--  作者:有点甜
--  发布时间:2018/12/3 17:31:00
--  

这样也是慢的,如

 

UPDATE {表名} as a SET 查重 = (Select Count(*) From {表名} as b where b.身份证号码 = a.身份证号码)