2016-11-08 104 views
0

我使用此查詢從表Customers中獲取頁面和索引受限制的結果。例如:Sql服務器返回選擇存儲過程中的行數

如果@iStartIndex = 0和@iRowsPerPage = 10的結果爲0 10行 - 10

SELECT 
     Name, LastName, City      
     FROM Customers         
    OFFSET @iStartIndex ROWS 
    FETCH NEXT @iRowsPerPage ROWS ONLY 

我的問題是,我還需要一些從查詢中的所有行。例如:如果有1000行,查詢將只選擇10行。我需要這10行,但我也需要知道結果中有多少行 - 在這種情況下爲1000行。

我已經試過的是返回@@ ROWCOUNT,但它返回10,最後一個查詢的結果。 我也試着寫一個單獨的查詢:

SELECT COUNT(*)     
FROM Customers 

和下面我寫了原來的查詢。

是否有一種方法可以返回行,還可以將行數作爲標量值返回到同一存儲過程中?

+1

你必須做兩個查詢,沒有辦法繞過它。如果您喜歡(通過將第一個結果分配給變量)或使用輸出參數,仍然可以將這些查詢組合到一個結果集中。 (從技術上講,你可以在一個查詢中填充第一個查詢中的第一個查詢,但這仍然是後臺的兩個查詢。) –

+0

嗯......如果結果中有10行,你可以解釋10不是正確的號碼?如果您想要獲得客戶總數,則必須將其作爲單獨的查詢(或子查詢)來完成。 –

+1

它可以用窗口聚合來完成,但大多數人報告性能比運行兩個單獨的查詢更差 –

回答

1

我認爲你正在尋找這樣的東西。只需返回總數與結果集。這種情況並不少見,尤其是在SP中,ssrs和其他報告工具爲每條記錄返回重複數據。

DECLARE @TotalCount INT=SELECT COUNT(*) FROM Customers 
SELECT 
    Name, LastName, City, [email protected]      
    FROM Customers         
OFFSET @iStartIndex ROWS 
FETCH NEXT @iRowsPerPage ROWS ONLY 
+0

我想到了這個解決方案。太。所有結果都將重複10行。如果這並不罕見,爲什麼不呢。 – FrenkyB

+0

調用兩個命令的開銷和創建兩個數據庫連接以獲得總計數的可能性遠遠超過這種情況下的附加有效負載。即使對於幾百條記錄,我也可以說,複製幾個字段元數據或聚合。 –