5

SQL Server 中是否有关键字或元信息会告诉您 TOP 是否生效?

EX:
Select TOP 5 * From Stuff

RESULT: 5 rows

确定是否会有 6 个或更多的最佳方法是什么?

I could do:
SELECT TOP 6 count(*) FROM Stuff

但我担心单独调用来检索计数,因为实际查询比这个要复杂得多,而且在一张大表上。

谢谢!

4

6 回答 6

12

没有什么可以自动使用的。你可以使用这些方面的东西

DECLARE @N INT = 5;

WITH T
     AS (SELECT TOP (@N + 1) *
         FROM   master..spt_values
         ORDER  BY number)
SELECT TOP (@N) *,
             CASE
               WHEN Count(*) OVER () = (@N + 1) THEN 1
               ELSE 0
             END AS MoreRecords
FROM   T
ORDER  BY number 
于 2012-06-13T18:38:43.357 回答
7

好吧,您可以选择前 N+1(在您的示例中 N 为 5,因此在您的示例中选择前 6 个)并丢弃客户端代码中的最后一个,并使用第六个元素的存在来确定是否 TOP如果您首先使用 N 会产生影响。但是,我不确定这样做有多大价值。

于 2012-06-13T18:43:24.210 回答
0

您可以将布尔值附加到查询中,当具有相同逻辑的子查询的 COUNT(*) 返回大于 5 的值时返回 true,当返回值 5 或更少时返回 false。

这会将您需要的信息添加到返回的数据中。如果您关心性能,并且查询非常复杂,那么与单独的查询相比,这可能不会带来很大的改进,但充其量只能带来很小的改进。

于 2012-06-13T18:36:26.337 回答
0

如果没有两个查询或执行性能扼杀重新计算,就没有办法做到这一点......

Select TOP 5 * From Stuff

Select Count(*) From Stuff
于 2012-06-13T18:37:05.947 回答
0
SELECT TOP 5 Field1, field2, recordcount 
FROM Stuff
CROSS JOIN  (SELECT  COUNT(*) as recordcount FROM Stuff) a
ORDER BY Field1
于 2012-06-13T18:42:24.790 回答
0
select top 5 *,
    case when count(*) OVER() <= 5 then 'yes' else 'no' end as AllRecordsReturned
from supportContacts
于 2012-06-13T18:42:53.213 回答