2012-09-11 18 views
5

मेरे पास SQL ​​Server 2012 में एक क्वेरी है जो मुझे निर्दिष्ट पृष्ठ आकार और जिस पृष्ठ पर है, उसके आधार पर कई रिकॉर्ड्स वापस प्राप्त करनी चाहिए। ऐसा लगता है:ऑफ़सेट प्राप्त करें सभी पंक्तियां प्राप्त करने के लिए अगला

 

SELECT LocID, LocName 
FROM Locations 
ORDER BY LocName OFFSET @PageNum ROWS 
FETCH NEXT @PageSize ROWS ONLY 
 

कोड बहुत आसान है। मुझे क्या करने की ज़रूरत है, हालांकि, इसे एक फ़ंक्शन में सही ढंग से पेजिंग को वापस करने के लिए रखा गया है। हालांकि, मुझे इस फ़ंक्शन से सभी रिकॉर्ड्स की आवश्यकता भी हो सकती है, इसलिए मुझे बिना किसी ऑफ़सेट या फ़ेच के फ़ंक्शन को कॉल करने का विकल्प होना चाहिए (ज्यादातर, यह ऐसी रिपोर्ट के लिए है जिसमें कोई पेजिंग नहीं है और केवल सीधा डेटा होना चाहिए) । मैं ऐसा करने के लिए एक अच्छा तरीका नहीं सोच सकता।

+0

क्यों न केवल इसे '@ पेज साइज' के साथ कॉल करें जो सभी रिकॉर्ड वापस करने के लिए पर्याप्त है? –

+1

समस्या यह है कि, मुझे नहीं पता कि रिकॉर्ड चलाने के बाद तक रिकॉर्ड सेट कितना बड़ा होगा। मुझे उस समस्या के समान कुछ और सवाल था। – CrystalBlue

+2

आईएनटी या बिगिनट की ऊपरी सीमा पर्याप्त होनी चाहिए ... –

उत्तर

7

आप कह सकते हैं:

@PageNum INT, 
@PageSize INT 

... 

SELECT @PageSize = COALESCE(@PageSize, 2000000000); 
-- 2 billion should be enough? 

... OFFSET (COALESCE(@PageNum, 1)-1)*@PageSize ROWS 
FETCH NEXT @PageSize ROWS ONLY; 

तुम सिर्फ सभी पंक्तियों चाहते हैं, तो दोनों मापदंडों के शून्य में गुजरती हैं।

+0

यह वही है जो मुझे अब के लिए अन्य लोगों द्वारा करने का सुझाव दिया गया है, इसलिए यह सबसे वैध उत्तर की तरह लगता है। धन्यवाद! – CrystalBlue

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