以文本方式查看主题 - 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.身份证号码) |