4

我正在使用 SQL Server 2008 R2,并且试图找到一种有效的方法来测试匹配条件的表中是否存在多于 1 行。

最简单的方法是 COUNT:

IF  (   SELECT  COUNT(*)
        FROM    Table
        WHERE   Column  = <something>
    )   > 1 BEGIN
    ...
END

但这需要实际计算一个 COUNT,这是一种浪费。我只想测试超过1。

我想出的唯一方法是对 TOP 2 进行计数:

IF  (   SELECT  COUNT(*)
        FROM    (   SELECT  TOP 2   0   x
                    FROM    Table
                    WHERE   Column  = <something>
                )   x
    )   > 1 BEGIN
    ...
END

这很笨重,需要评论才能记录。有没有更简洁的方法?

4

2 回答 2

1

如果您正在检查的表中有一个 PK >1 行,则可以嵌套另一个 EXISTS 子句。不确定这是否更快,但它可以达到您的记录结果。例如,假设一个带有名为 ID 的 PK 的 Station 表可以有零对多的带有名为 ID 的 PK 的 Location 表记录,Location 具有 FK StationID,并且您希望找到具有至少两个 Locations 的 Stations:

SELECT s.ID
FROM Station s
WHERE EXISTS (
    SELECT 1
    FROM Location L
    WHERE L.StationID = s.ID
    AND EXISTS (
        SELECT 1
        FROM Location L2
        WHERE L2.StationID = L.StationID
        AND L2.ID <> L.ID
    )
)
于 2013-03-13T15:33:42.520 回答
0

我有以下解决方案要分享,这在性能方面可能更轻。我想您正在尝试获取第一条记录并在确保您的 SQL 选择返回单个记录后对其进行处理。因此,继续获取它,但是一旦你这样做了,立即尝试获取下一条记录,如果成功,你知道存在多个记录,你可以启动你的异常处理逻辑。否则,您仍然可以处理您的单条记录。

于 2016-09-22T14:42:57.637 回答