2013-08-08 10 views
12

में पेजिंग के साथ कुल गणना प्राप्त करने का बेहतर तरीका मुझे पेजिंग के साथ रिकॉर्ड की कुल गणना प्राप्त करने की आवश्यकता है। वर्तमान में मैं इसे SQL Server 2012 में नीचे सूचीबद्ध के रूप में कर रहा हूं। इसे गिनने के लिए एक अलग क्वेरी की आवश्यकता है। एसक्यूएल सर्वर 2012 में कोई बेहतर तरीका है?SQL सर्वर 2012

ALTER PROCEDURE dbo.tpGetPageRecords 
(
    @OffSetRowNo INT,  
    @FetchRowNo INT, 
    @TotalCount INT OUT 
) 
AS 

SELECT CSTNO, CSTABBR 
FROM DBATABC 
WHERE CSTABBR LIKE 'A%' 
ORDER BY CSTNO 
OFFSET (@OffSetRowNo-1) * @FetchRowNo ROWS 
FETCH NEXT @FetchRowNo ROWS ONLY 

SET @TotalCount = 
(SELECT COUNT(*) 
FROM DBATABC 
WHERE CSTABBR LIKE 'A%') 


GO 
+1

क्या हमें बदलने की अनुमति है * कैसे * कुल गिनती वापस आती है (आईई अब इसे आउटपुट पैरामीटर के रूप में वापस नहीं भेजती है)? –

+0

@Damien_The_Unbeliever। मेरी एकमात्र आवश्यकता है - मुझे कुल गिनती प्राप्त करने की आवश्यकता है। दृष्टिकोण – Lijo

उत्तर

26

हम अनुबंध को बदलने की अनुमति कर रहे हैं, आप कर सकते हैं:

SELECT CSTNO, CSTABBR,COUNT(*) OVER() as TotalCount 
FROM DBATABC 
WHERE CSTABBR LIKE 'A%' 
ORDER BY CSTNO 
OFFSET (@OffSetRowNo-1) * @FetchRowNo ROWS 
FETCH NEXT @FetchRowNo ROWS ONLY 

और अब कुल परिणाम सेट में एक अलग कॉलम के रूप में उपलब्ध हो जाएगा। दुर्भाग्यवश, इस मान को एक ही कथन में एक वैरिएबल को असाइन करने का कोई तरीका नहीं है, इसलिए हम इसे OUT पैरामीटर के रूप में प्रदान नहीं कर सकते हैं।

यह पूरे (असीमित) परिणाम सेट पर गणना करने की अनुमति देने के लिए OVER clause (2005 से उपलब्ध) का उपयोग करता है और GROUP आईएनजी की आवश्यकता के बिना।

+0

कोई फर्क नहीं पड़ता धन्यवाद .. यह काम करता है .... सामान्य रूप से प्रदर्शन के बारे में कैसे। क्या यह दृष्टिकोण एक वसादार परिणाम देने जा रहा है? – Lijo

+1

@Lijo - प्रदर्शन सामान्य बातों के बारे में सामान्य बातों के बारे में करना मुश्किल है - आपके टेबल, आपके डेटा के बिना, यह जानने के लिए कि कौन से सटीक संस्करण (सर्विस पैक, हॉटफिक्सेस इत्यादि), आप क्या चल रहे हैं, हार्डवेयर, आदि। कहें कि अगर यह आपके वर्तमान से भी बदतर हो तो मुझे आश्चर्य होगा। –

+1

@ लिजो, यहां बहुत सारे ifs और buts हैं, लेकिन मुझे अभी तक ऐसा कोई मामला नहीं दिख रहा है जहां इनलाइन गणना प्रश्न में दो प्रश्नों का प्रदर्शन करती है। सभी पंक्तियां उस खंड में मेल खाते हैं जहां क्लॉज आलसी स्पूल पर जाता है जिसे दो बार उपयोग किया जाता है। एक बार गिनती के लिए और शीर्ष ऑपरेटर के लिए फिर से सभी पंक्तियां प्राप्त करने के लिए। नीचे की रेखा आपको अपने डेटा पर परीक्षण करने की आवश्यकता है। –

संबंधित मुद्दे