2010-09-19 10 views
9

लगभग 500-10,000 पंक्तियों वाली तालिका के विरुद्ध SQL सर्वर 2005 का उपयोग कर सबसे कुशल पेजिंग समाधान क्या है? मैंने वहां कई लोगों को देखा है लेकिन उनकी तुलना कुछ भी नहीं।SQL सर्वर 2005 का उपयोग कर सर्वश्रेष्ठ पेजिंग समाधान?

+1

[एएसपी.नेट, एसक्यूएल 2005 "पेजिंग"] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/1058825/asp-net-sql-2005-paging) – M4N

+0

कई: http://stackoverflow.com/प्रश्न/टैग/पेजिनेशन + एसक्यूएल-सर्वर –

उत्तर

22

आकार की एक तालिका के लिए, एक सामान्य-तालिका अभिव्यक्ति (सीटीई) और ROW_NUMBER का उपयोग करें; @PageNumber और @PageSize चर (या जो भी आप उन्हें कॉल करना चाहते हैं) के आधार पर वापस लाने के लिए रिकॉर्ड्स की गणना करने के लिए एक छोटे से फ़ंक्शन का उपयोग करें। हमारे संग्रहित प्रक्रियाओं में से एक से सरल उदाहरण:

-- calculate the record numbers that we need 

DECLARE @FirstRow INT, @LastRow INT 
SELECT @FirstRow = ((@PageNumber - 1) * @PageSize) + 1, 
     @LastRow = ((@PageNumber - 1) * @PageSize) + @PageSize 

; 
WITH CTE AS 
(
    SELECT [Fields] 
      , ROW_NUMBER() OVER (ORDER BY [Field] [ASC|DESC]) as RowNumber 
    FROM [Tables] 
    WHERE [Conditions, etc] 
) 
SELECT * 
     -- get the total records so the web layer can work out 
     -- how many pages there are 
     , (SELECT COUNT(*) FROM CTE) AS TotalRecords 
FROM CTE 
WHERE RowNumber BETWEEN @FirstRow AND @LastRow 
ORDER BY RowNumber ASC 
+0

क्या आपको पृष्ठों की कुल संख्या प्राप्त करने से पहले एक बार प्रो को चलाने के लिए इंतजार करना होगा? – Caveatrob

+0

पीएस - यह अब तक बहुत अच्छा काम कर रहा है! – Caveatrob

+0

हां - जिस तरह से हम करते हैं, वह एक छोटे पेजिंगइन्फो ऑब्जेक्ट को पॉप्युलेट करने के लिए प्रो के परिणामों का उपयोग करना है जो पेज नंबर लिंक लिखने की प्रक्रिया को संभालता है। मान लीजिए कि आप क्वेरी में जॉइन या फ़ंक्शन कॉल की पागल संख्या नहीं कर रहे हैं, इस बच्चे को तुरंत-करीब चलना चाहिए, इसलिए यह हमारे लिए कभी भी कोई मुद्दा नहीं रहा है। खुशी है कि यह आपके लिए काम कर रहा है :) –

4

विभिन्न पेजिंग तकनीक मैंने कभी पढ़ा है का सबसे अच्छा विचार विमर्श से एक यहां है: SQL Server 2005 Paging – The Holy Grail। आलेख देखने के लिए आपको SQLServerCentral.com पर एक नि: शुल्क पंजीकरण पूरा करना होगा, लेकिन यह इसके लायक है।

1

.. यहां तक ​​कि इस मदद करनी चाहिए

SELECT * FROM 
( 
    SELECT Row_Number() OVER(order by USER_ID) As RowID, 
    COUNT (USER_ID) OVER (PARTITION BY null) AS TOTAL_ROWS, 
    select name from usertbl 
) 
As RowResults WHERE 
RowID Between 0 AND 25 

नहीं जानते कि क्या अपने @keith संस्करण की तुलना में बेहतर है।