SQL Server 2005的新功能,now_number和热膨胀系数,可以实现。
例子如下:
设置测试数据:
复制代码代码如下所示:
创建表dup1
(
2国际空,
COL2 varchar(20)空
)
插入dup1值
(1,'AAA'),
(2,'AAA'),
(2,'AAA'),
(2,'AAA'),
(3,{BBB}),
(3,{BBB}),
(4,CCC),
(4,'ddd),
(5,'eee)
SELECT * FROM dup1

你可以看到重复的数据是:
复制代码代码如下所示:
SELECT col1,col2,计数(*)是由dupcountfrom dup1group col1,col2having计数(*)> 1

下一步是介绍如何删除重复数据:
1。now_number:SQL Server 2005增加了排行榜功能,是非常有用的(now_number,等级,dense_rank,ntile),使用now_number()在(分区Gy)是最直接、最方便的,不能修改表或产生冗余列。
首先,列数指定要排序col1和col2组合。
复制代码代码如下所示:
选择COL1,COL2,row_number()在(分区的col1,col2执行顺序)


序号的数目如下所示:
很明显,重复列被分成组,只需要删除就可以删除序列号> 1。
复制代码代码如下所示:
使用热膨胀系数
与dupsd
(如
SELECT col1,col2,
row_number()在(分区col1,col2为RN的col1)
从dup1
)
删除dupsd
RN>1;
或
删除(从
SELECT col1,col2,
row_number()在(分区col1,col2为RN的col1)
从一个地方dup1 a.rn > 1)

2。创建一个唯一的令牌标识一个键列。
复制代码代码如下所示:
修改表dbo.dup1
添加
PK国际认同
不为空
pk_dup1主键约束;
*选择
从dup1;

删除记录是col1,col2相同,大于dup1.pk,即保持最小的PK中的重复值。
复制代码代码如下所示:
DELETE Dup1
存在(选择*)
从dup1 D1
在d1.col1 = dup1.col1
和d1.col2 = dup1.col2
和d1.pk > dup1 PK);

3.select远为,采用了一种新的表格将不重复的结果集到新表。
复制代码代码如下所示:
选择不同的col1,col2为nodupsfrom dup1;选择*从nodups

建议采用第一种和第三种方法。首先是更常见的在T-SQL编程,和第三是常用的ETL。