如何让T-SQL代码find重复?

MS Access有一个button来生成用于查找重复行的sql代码。 我不知道SQL Server 2005/2008 Managment Studio是否有这个function。

  1. 如果有,请指向哪里

  2. 如果没有,请告诉我如何有一个T-SQL助手来创build这样的代码。

那么,如果你的表中有整行作为重复项,那么你至less没有为该表设置主键,否则至less主键值将会不同。

但是,以下是如何构buildSQL以通过一组列来重复:

SELECT col1, col2, col3, col4 FROM table GROUP BY col1, col2, col3, col4 HAVING COUNT(*) > 1 

这将find行col1-col4,具有相同的值组合,不止一次。

例如,在下表中,第2 + 3行将是重复的:

 PK col1 col2 col3 col4 col5 1 1 2 3 4 6 2 1 3 4 7 7 3 1 3 4 7 10 4 2 3 1 4 5 

这两行在列col1-col4中共享公共值,因此,通过该SQL,被认为是重复的。 展开列的列表以包含您希望分析的所有列。

如果您使用的是SQL Server 2005+,则可以使用以下代码查看所有行以及其他列:

 SELECT *, ROW_NUMBER() OVER (PARTITION BY col1, col2, col3, col4 ORDER BY (SELECT 0)) AS DuplicateRowNumber FROM table 

Youd也可以使用这种技术删除(或以其他方式处理)重复项:

 WITH cte AS (SELECT *, ROW_NUMBER() OVER (PARTITION BY col1, col2, col3, col4 ORDER BY (SELECT 0)) AS DuplicateRowNumber FROM table ) DELETE FROM cte WHERE DuplicateRowNumber > 1 

ROW_NUMBERfunction非常强大 – 您可以用它做很多事情 – 请参阅http://msdn.microsoft.com/zh-cn/library/ms186734.aspx上的BOL文章;

当我需要转储具有一个或多个重复字段的整行时,我发现这个解决scheme,但我不想在表中键入每个字段的名称:

 SELECT * FROM db WHERE col IN (SELECT col FROM db GROUP BY col HAVING COUNT(*) > 1) ORDER BY col 

AFAIK,它没有。 只需按表的所有字段进行select语句分组,并使用having子句进行筛选,其中count大于1。

如果您的行除了通过键被复制,则不要在select字段中包含该键。