Microsoft SQL Server
पृष्ठ पर अंक लगाना
खोज…
परिचय
वाक्य - विन्यास
- का चयन करें * से तालिका नाम से पता चलता है, केवल 10 पंक्तियों के बाद से केवल 10 पंक्तियाँ;
एक सामान्य टेबल एक्सप्रेशन के साथ ROW_NUMBER का उपयोग करके पृष्ठांकन
ROW_NUMBER
फ़ंक्शन परिणाम सेट में प्रत्येक पंक्ति को एक वृद्धि संख्या निर्दिष्ट कर सकता है। एक कॉमन टेबल एक्सप्रेशन के साथ संयुक्त है जो एक BETWEEN
ऑपरेटर का उपयोग करता है, परिणाम सेट के 'पेज' बनाना संभव है। उदाहरण के लिए: पृष्ठ एक वाले परिणाम 1-10, पृष्ठ दो वाले परिणाम 11-20, पृष्ठ तीन वाले परिणाम 21-30, और इसी तरह।
WITH data
AS
(
SELECT ROW_NUMBER() OVER (ORDER BY name) AS row_id,
object_id,
name,
type,
create_date
FROM sys.objects
)
SELECT *
FROM data
WHERE row_id BETWEEN 41 AND 50
नोट: ROW_NUMBER
का उपयोग WHERE
क्लॉज में करना संभव नहीं है जैसे:
SELECT object_id,
name,
type,
create_date
FROM sys.objects
WHERE ROW_NUMBER() OVER (ORDER BY name) BETWEEN 41 AND 50
यद्यपि यह अधिक सुविधाजनक होगा, SQL सर्वर इस मामले में निम्नलिखित त्रुटि लौटाएगा:
Msg 4108, स्तर 15, राज्य 1, पंक्ति 6
विंडो किए गए फ़ंक्शन केवल SELECT या ORDER BY क्लॉस में दिखाई दे सकते हैं।
OFFSET FETCH के साथ अंकुरण
OFFSET FETCH
क्लॉज अधिक संक्षिप्त तरीके से पृष्ठांकन को लागू करता है। इसके साथ, N1 पंक्तियों ( OFFSET
में निर्दिष्ट) को छोड़ना और अगली N2 पंक्तियों को वापस करना संभव है ( FETCH
में निर्दिष्ट):
SELECT *
FROM sys.objects
ORDER BY object_id
OFFSET 40 ROWS FETCH NEXT 10 ROWS ONLY
नियतात्मक परिणाम प्रदान करने के लिए ORDER BY
की आवश्यकता है।
पगिनटन आंतरिक प्रश्न के साथ
SQL सर्वर के पुराने संस्करणों में, डेवलपर्स को पृष्ठ में पंक्तियों को वापस करने के लिए TOP
कीवर्ड के साथ संयुक्त डबल सॉर्टिंग का उपयोग करना था:
SELECT TOP 10 *
FROM
(
SELECT
TOP 50 object_id,
name,
type,
create_date
FROM sys.objects
ORDER BY name ASC
) AS data
ORDER BY name DESC
आंतरिक क्वेरी name
द्वारा आदेशित पहली 50 पंक्तियों को वापस कर देगी। फिर बाहरी क्वेरी इन 50 पंक्तियों के क्रम को उलट देगी और शीर्ष 10 पंक्तियों का चयन करेगी (ये उलटफेर से पहले समूह में अंतिम 10 पंक्तियाँ होंगी)।
SQL सर्वर के विभिन्न संस्करणों में पेजिंग
SQL सर्वर 2012/2014
DECLARE @RowsPerPage INT = 10, @PageNumber INT = 4
SELECT OrderId, ProductId
FROM OrderDetail
ORDER BY OrderId
OFFSET (@PageNumber - 1) * @RowsPerPage ROWS
FETCH NEXT @RowsPerPage ROWS ONLY
SQL सर्वर 2005/2008 / R2
DECLARE @RowsPerPage INT = 10, @PageNumber INT = 4
SELECT OrderId, ProductId
FROM (
SELECT OrderId, ProductId, ROW_NUMBER() OVER (ORDER BY OrderId) AS RowNum
FROM OrderDetail) AS OD
WHERE OD.RowNum BETWEEN ((@PageNumber - 1 ) * @RowsPerPage) + 1
AND @RowsPerPage * @PageNumber
SQL सर्वर 2000
DECLARE @RowsPerPage INT = 10, @PageNumber INT = 4
SELECT OrderId, ProductId
FROM (SELECT TOP (@RowsPerPage) OrderId, ProductId
FROM (SELECT TOP ((@PageNumber)*@RowsPerPage) OrderId, ProductId
FROM OrderDetail
ORDER BY OrderId) AS OD
ORDER BY OrderId DESC) AS OD2
ORDER BY OrderId ASC
SQL सर्वर 2012/2014 OFFSET और FETCH नेक्स्ट का उपयोग कर
अगली 10 पंक्तियाँ प्राप्त करने के लिए बस इस क्वेरी को चलाएं:
SELECT * FROM TableName ORDER BY id OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY;
इसका उपयोग करते समय विचार करने के लिए मुख्य बिंदु:
-
ORDER BY
OFFSET
औरFETCH
क्लॉज का उपयोग करना अनिवार्य है। -
OFFSET
क्लॉजFETCH
साथ अनिवार्य है। आप कभी भी,ORDER BY
...FETCH
उपयोग नहीं कर सकते। -
TOP
को उसी क्वेरी एक्सप्रेशन मेंOFFSET
औरFETCH
के साथ नहीं जोड़ा जा सकता है।