抱SQL SERVER大腿之从巨大表中提炼非重复数据

SQL SERVER大腿之从巨大表中提炼非重复数据

左直拳

有一个表,2千多万条记录,其中有很大部分只有一两个字段的内容不同,可视为重复记录。现在要从这个表里提炼出不重复的部分,转移到另一个新表里。同时这个转移不是简单的复制,因为两表的结构不同,新表中的新字段需要赋值。

凭我那两下子,是这么搞的:

1、不能用一条SQL语句搞定(也许有,我写不出来)。要用循环;

2、使用临时表;

3、删除临时表中的重复记录,然后转移到新表

过程如下:

--创建一个与新表一模一样的临时表

CREATE TABLE #TEMP ……

--循环,将符合条件的记录(未过滤重复)插进临时表

--这里对这个巨大表是分批处理的,每个循环最多处理10万条

WHILE( @i < @j )

BEGIN

SET @k1 = @i * 100000

SET @k2 = (@i + 1) * 100000

INSERT INTO #TEMP(……)

SELECT

……

FROM a, b

WHERE ……

AND a.Id BETWEEN @k1 AND @k2

GROUP BY ……

--赋新值

UPDATE #TEMP SET ……

FROM #TEMP,a

WHERE ……

AND a.Id BETWEEN @k1 AND @k2

SET @i = @i + 1

END

--删除重复行

DELETE FROM #TEMP WHERE

EXISTS(SELECT 1 FROM #TEMP a WHERE a.Id<#TEMP.Id AND a. KeyId=#TEMP.KeyId)

--最后将数据从临时表复制到新表

INSERT INTO ……

SELECT ……

FROM #TEMP

两千多万条记录啊。

两千多万条记录算条毛?要是两千多万元人民币多好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值