您可以使用row_number()将数字分配给重复项并删除rn
大于一的位置(单次出现或第一次重复)。
一个小测试,因为 Sql Fiddle 不可用 ATM:
declare @t table (FIELD1 varchar(10), FIELD2 varchar(10), FIELD3 varchar(10), FIELD4 varchar(10), FIELD5 varchar(10))
insert into @t values ('5', '3', '2', 'A', 'J')
insert into @t values ('3', '5', '2', 'A', 'J')
insert into @t values ('5', '3', '2', 'A', 'J')
insert into @t values ('5', '3', '2', 'A', 'J')
insert into @t values ('8', 'B', '8', 'A', 'K')
; with g as (
select *,
row_number() over (partition by field1, field2, field3, field4, field5
order by (select null)) rn
from @t
)
delete g
where rn > 1
select *
from @t
缺点是您必须指定所有列。如果您想避免这种情况,并且您的表没有外键并且没有被任何人引用,您可以将DISTINCT
数据插入临时表、TRUNCATE
原始表并从临时表重新插入。