2013-08-12 46 views
0

目標很簡單:獲取總行數和一些數據頁。帶有OFFSET .. FETCH問題的總行數

當我使用OFFSET ...取的方法來實現與總的行計數我運行到尋呼以下問題當我們通過一些大的頁碼(例如,我們只有100行,但請求第15,每頁10條記錄)COUNT(*)OVER()語句從未調用,因爲結果集爲空。所以,在這種情況下,我們無法得到正確的總行數

即使在大頁碼傳遞時,是否可以使用OFFSET ... FETCH方法獲得正確的總行數?

僅供參考,OFFSET ...取的做法是:

SELECT 
    ... 
    Total = COUNT(*) OVER() 
FROM Table1 
ORDER BY Col1 
    OFFSET (@PageNum-1) * @PageSize ROWS 
    FETCH NEXT @PageSize ROWS ONLY; 

回答

1

我認爲答案是 「不」。您要將總行數附加到返回的每一行上。該查詢沒有返回任何行,所以沒有地方可以放入總數。

順便說一下,我的確設想total正在計算中。但沒有任何行,你永遠不會看到它。

編輯:

唯一的變通辦法,我能想到的是在應用層。如果沒有行被返回,則運行:

SELECT Total = COUNT(*) OVER() 
FROM Table1; 

您可以實際運行此操作以獲取總數。缺點是桌子不是桌子,而是一個昂貴的觀點。

+0

你能提出任何解決方法嗎? –