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)
如果有多个重复行但仍返回不重复的行,如何只返回一行?
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