Foxtable(狐表)用户栏目专家坐堂 → SQLServer数据源,如何查重身份证?


  共有1803人关注过本帖树形打印复制链接

主题:SQLServer数据源,如何查重身份证?

帅哥哟,离线,有人找我吗?
pc005637
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1022 积分:12768 威望:0 精华:0 注册:2011/5/29 15:19:00
SQLServer数据源,如何查重身份证?  发帖心情 Post By:2018/12/3 15:29:00 [只看该作者]

例子:一个表,有"身份证号码" 和 “查重” 列。

目前代码:
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+万条数据时,消耗时间有点难以接受。
能否有更好的方式,让数据尽量全部在数据库里面计算。因为网络环境也不是太好。

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/12/3 15:43:00 [只看该作者]

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

 

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


 回到顶部
帅哥哟,离线,有人找我吗?
pc005637
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1022 积分:12768 威望:0 精华:0 注册:2011/5/29 15:19:00
回复  发帖心情 Post By:2018/12/3 15:49:00 [只看该作者]

测试过,将数据加载在表里面,用compute语句,也是很慢。有没有,全部在后台处理的方式?

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

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By: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
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1022 积分:12768 威望:0 精华:0 注册:2011/5/29 15:19:00
能否这样?  发帖心情 Post By:2018/12/3 17:09:00 [只看该作者]

cm d.Command Text = "UP DATE {表名} SE T 查重 = (Select Count(*) F rom {表名} 身份证号码 = ......
这样子的SQL语句,在后台处理?

语句不会写。

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/12/3 17:31:00 [只看该作者]

这样也是慢的,如

 

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


 回到顶部