标点符(钱魏 Way)

SQL Server中删除重复数据的方法

在一个没有主键的MSSQL的数据表中如何删除重复数据这个问题,是前几天在处理数据的时候遇到的。一下为具体方法:

删除数据的代码比较的简短,但是中间用到了很多SQL 2008才有的新特性。

特性一:CTE语法

通过CTE可以创建出一张临时表,这张表在定义中可以实现自引用,方便处理父子关系 。具体语法为:

WITH <CTE name> [(<column name>,[,…n])] AS (<query returning tabular data>)

<startment that will make use of the  CTE>

特性二:ROW_NUMBER()

返回结果集分区内行的序列号,每个分区的第一行从 1 开始。具体语法为:

ROW_NUMBER ( )     OVER ( [ PARTITION BY value_expression , … [ n ] ] order_by_clause )

PARTITION BY value_expression

将 FROM 子句生成的结果集划入应用了 ROW_NUMBER 函数的分区。 value_expression 指定对结果集进行分区所依据的列。 如果未指定 PARTITION BY,则此函数将查询结果集的所有行视为单个组。

order_by_clause

ORDER BY 子句可确定在特定分区中为行分配唯一 ROW_NUMBER 的顺序。 它是必需的。

码字很辛苦,转载请注明来自标点符《SQL Server中删除重复数据的方法》

评论