之前的做法是声明一个完全一样的临时表,用SELECT distinct 把数据插入到临时表中,删除该表数据再重新插入回来。这么做当然可以达到目的,但是如果数据量比较大的时候就不行了。
效率啊~!!
今天看到别人写了一个方法不错,还适合大量数据,不过用到2005中新函数ROW_NUMBER() 和WITH AS ,废话不说,上代码:
declare @tb table(id int, name varchar(10))
insert into @tb values(1,\'zhw\');
insert into @tb values(1,\'zhw\');
insert into @tb values(1,\'zhw\');
insert into @tb values(3,\'zhw\');
insert into @tb values(4,\'zhw\');
WITH TEST AS
(
SELECT ROW_NUMBER()
OVER(PARTITION BY id,name ORDER BY ID )
AS NUM,* FROM @tb
)
DELETE FROM TEST
WHERE NUM != 1
select * from @tb
insert into @tb values(1,\'zhw\');
insert into @tb values(1,\'zhw\');
insert into @tb values(3,\'zhw\');
insert into @tb values(4,\'zhw\');
WITH TEST AS
(
SELECT ROW_NUMBER()
OVER(PARTITION BY id,name ORDER BY ID )
AS NUM,* FROM @tb
)
DELETE FROM TEST
WHERE NUM != 1
select * from @tb
下面给个关于WITH AS 使用方法链接
http://wudataoge.blog.163.com/blog/static/80073886200961652022389/