我有一个 SELECT 可以从表中返回数百行(表可以是 ~50000 行)。我的应用程序有兴趣知道返回的行数,这对我来说很重要,但它实际上只使用了这数百行中的前 5 行。我想要做的是将 SELECT 查询限制为仅返回 5 行,但还要告诉我的应用程序将返回多少行(数百行)。这是原始查询:
SELECT id, a, b, c FROM table WHERE a < 2
这是我想出的——CTE——但我对每列中出现的总行数感到不舒服。理想情况下,我想要一个 TOP 5 的结果集和一个返回的总行数参数。
WITH Everything AS
(
SELECT id, a, b, c FROM table
),
DetermineCount AS
(
SELECT COUNT(*) AS Total FROM Everything
)
SELECT TOP (5) id, a, b, c, Total
FROM Everything
CROSS JOIN DetermineCount;
你能想出更好的方法吗?
T-SQl 中是否有办法在应用顶部之前返回选择顶部查询的受影响行数?@@rowcount 会返回 5 但我想知道是否有 @@rowcountbeforetop 之类的东西。
在此先感谢您的帮助。
** 更新 **
这就是我现在正在做的事情,我有点喜欢 CTE,尽管 CTE 如此优雅。
-- @count is passed in as an out param to the stored procedure
CREATE TABLE dbo.#everything (id int, a int, b int, c int);
INSERT INTO #everything
SELECT id, a, b, c FROM table WHERE a < 2;
SET @count = @@rowcount;
SELECT TOP (5) id FROM #everything;
DROP TABLE #everything;