Sql 如何在使用顶行筛选器时获取总行数

Sql 如何在使用顶行筛选器时获取总行数,sql,sql-server-2008,Sql,Sql Server 2008,我的存储过程中有一个临时表,我将用select语句填充它。最后,我必须只选择几个顶级记录发送到UI 有什么方法可以让我知道总记录,但选择最上面的几个记录。意味着如果我有2515条记录,但我只选择了前1000条,但仍然可以了解总数 SELECT TOP (@ROWS) * FROM #tempMoveFinal WHERE case_id = @case_id ORDER BY last_update_date DESC, item_id 我尝试将所有记录放在另一个没有top row子句的

我的存储过程中有一个临时表,我将用select语句填充它。最后,我必须只选择几个顶级记录发送到UI

有什么方法可以让我知道总记录,但选择最上面的几个记录。意味着如果我有2515条记录,但我只选择了前1000条,但仍然可以了解总数

SELECT TOP (@ROWS) * 
FROM #tempMoveFinal 
WHERE case_id = @case_id 
ORDER BY last_update_date DESC, item_id
我尝试将所有记录放在另一个没有top row子句的临时表中,然后选择总行数,但这会使搜索查询变慢


是否有任何内置函数可用于这种情况?

我认为您的意思是:

with total as (
    select 
       count(*)         as TotalCount
    from #tempMoveFinal 
    WHERE case_id = @case_id 
)
SELECT TOP (@ROWS) * 
    ,total.TotalCount
FROM #tempMoveFinal 
CROSS JOIN total
WHERE case_id = @case_id 
ORDER BY last_update_date DESC, item_id

SQL Server 2008、2012为什么不运行两个查询—一个用于计数,一个用于行?@ventsyv:这是最佳做法吗?我知道这是最后一个解决方案,但为什么要运行同一个东西两次呢?我正在尝试这个方法,但在关键字“with”附近出现错误-语法不正确。如果此语句是公共表表达式、xmlnamespaces子句或更改跟踪上下文子句,则上一条语句必须以分号终止。@user728630:上一条命令必须以分号终止。出于这样的习惯,许多开发人员在前面加上分号:;使用….谢谢,只需担心它会显示所有行的总数。希望那不是一场表演hit@user728630:除非您有数千万行,并且假设存在聚集索引,否则不会有问题。优化器在每次决定是否使用任何索引时都会使用聚集索引统计数据中存储的总行数,因此任何开销都是免费的。谢谢,最后一件事,如果我想将TotalCount值分配给变量,我如何才能。因为编译器在这样做时无法识别“total”-SET@totalCount=SELECT TOP 1*FROM total