SQL Server 中是否有关键字或元信息会告诉您 TOP 是否生效?
EX:
Select TOP 5 * From Stuff
RESULT: 5 rows
确定是否会有 6 个或更多的最佳方法是什么?
I could do:
SELECT TOP 6 count(*) FROM Stuff
但我担心单独调用来检索计数,因为实际查询比这个要复杂得多,而且在一张大表上。
谢谢!
SQL Server 中是否有关键字或元信息会告诉您 TOP 是否生效?
EX:
Select TOP 5 * From Stuff
RESULT: 5 rows
确定是否会有 6 个或更多的最佳方法是什么?
I could do:
SELECT TOP 6 count(*) FROM Stuff
但我担心单独调用来检索计数,因为实际查询比这个要复杂得多,而且在一张大表上。
谢谢!
没有什么可以自动使用的。你可以使用这些方面的东西
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
好吧,您可以选择前 N+1(在您的示例中 N 为 5,因此在您的示例中选择前 6 个)并丢弃客户端代码中的最后一个,并使用第六个元素的存在来确定是否 TOP如果您首先使用 N 会产生影响。但是,我不确定这样做有多大价值。
您可以将布尔值附加到查询中,当具有相同逻辑的子查询的 COUNT(*) 返回大于 5 的值时返回 true,当返回值 5 或更少时返回 false。
这会将您需要的信息添加到返回的数据中。如果您关心性能,并且查询非常复杂,那么与单独的查询相比,这可能不会带来很大的改进,但充其量只能带来很小的改进。
如果没有两个查询或执行性能扼杀重新计算,就没有办法做到这一点......
Select TOP 5 * From Stuff
和
Select Count(*) From Stuff
SELECT TOP 5 Field1, field2, recordcount
FROM Stuff
CROSS JOIN (SELECT COUNT(*) as recordcount FROM Stuff) a
ORDER BY Field1
select top 5 *,
case when count(*) OVER() <= 5 then 'yes' else 'no' end as AllRecordsReturned
from supportContacts