Sql Server:仅当查询是唯一的时才从查询中返回一行

时间:2014-02-04 16:21:11

标签: sql-server

在Sql Server中我希望能够在我的查询中返回一个结果,如果存在完全匹配,即我只匹配一行,如果没有,我想不返回结果所有

我意识到在sql查询返回后,在代码中处理这个问题相当容易,但我希望能够在Sql Server中进行测试,如果它可以相当容易地实现的话。

2 个答案:

答案 0 :(得分:2)

如果我理解正确,如果您只匹配一条且只有一条记录,那么您只想获取数据。

一种方法是使用中间结果集COUNT@@ROWCOUNT

您可以将结果放入#TEMP表或@Table变量,然后检查该表或@@ROWCOUNT变量以确定是否有一行。如果这样做,则返回中间结果集。

答案 1 :(得分:1)

如果这是SQL Server 2005或更高版本,您可以使用COUNT() OVER,如下所示:

WITH matches AS (
  SELECT
    ...,
    TotalMatches = COUNT(*) OVER ()
  FROM ...
  WHERE ...
)
SELECT *
FROM matches
WHERE TotalMatches = 1
;

matches CTE找到符合主要要求的所有行,并将它们与匹配总数一起返回。仅当满足额外要求(总匹配计数为1)时,主查询才会返回找到的结果。