从重复的行中选择一行

swo*_*978 5 sql t-sql sql-server sql-server-2005

我有一个loooooong存储过程,它在数据库中的不同表中运行大约15个select语句 - 我将所有选择的结果插入到临时表中.但是 - 该表有一些完全重复的行.临时表看起来像这样:

DocID   | VisitDate            | DocName
8245376 | 8/26/2009 1:07:01 PM | Doc1   
8245376 | 8/26/2009 1:07:01 PM | Doc1   
8245376 | 8/26/2009 1:07:01 PM | Doc2   
8245376 | 8/26/2009 1:07:01 PM | Doc2   
646681  | 8/26/2009 1:07:01 PM | Doc3    
263272  | 8/26/2009 1:07:01 PM | Doc4   
8245376 | 8/26/2009 1:07:01 PM | Doc5   
8245376 | 8/26/2009 1:07:01 PM | Doc5   
8245376 | 8/26/2009 1:07:01 PM | Doc6   
8245376 | 8/26/2009 1:07:01 PM | Doc6   
1903875 | 8/26/2009 1:07:01 PM | Doc7
Run Code Online (Sandbox Code Playgroud)

而我希望表格看到最后是这样的:

DocID   | VisitDate            | DocName
8245376 | 8/26/2009 1:07:01 PM | Doc1   
8245376 | 8/26/2009 1:07:01 PM | Doc2   
646681  | 8/26/2009 1:07:01 PM | Doc3    
263272  | 8/26/2009 1:07:01 PM | Doc4   
8245376 | 8/26/2009 1:07:01 PM | Doc5   
8245376 | 8/26/2009 1:07:01 PM | Doc6   
1903875 | 8/26/2009 1:07:01 PM | Doc7
Run Code Online (Sandbox Code Playgroud)

如果有多个重复行但仍返回不重复的行,如何只返回一行?

Qua*_*noi 9

SELECT  DISTINCT DocID, VisitDate, DocName
FROM    mytable
Run Code Online (Sandbox Code Playgroud)

或者我错过了什么?

更新:

如果您可以控制存储过程,则可以重写它,以便不会重复进入表中.

假设DocID是a PRIMARY KEY,使用IGNORE_DUP_KEY以下命令在临时表中声明它:

DECLARE @temp TABLE (DocId INT NOT NULL PRIMARY KEY WITH (IGNORE_DUP_KEY = ON), …)

INSERT
INTO    @mytable
SELECT  …
FROM    source_table
Run Code Online (Sandbox Code Playgroud)

这将跳过重复 DocID