यह एक सामान्य SQL Server 2000 संग्रहित प्रक्रिया है जो किसी भी तालिका पर पृष्ठांकन निष्पादित करेगी। संग्रहित प्रक्रिया तालिका के नाम को स्वीकार करती है, कॉलम आउटपुट (तालिका में सभी कॉलम के लिए डिफ़ॉल्ट), एक वैकल्पिक WHERE स्थिति, वैकल्पिक सॉर्ट ऑर्डर, पुनर्प्राप्त करने के लिए पृष्ठ संख्या और प्रति पृष्ठ पंक्तियों की संख्या स्वीकार करता है।
CREATE PROCEDURE [dbo].[GetPage]
@pTableName VARCHAR(30),
@pColumns VARCHAR(200) = '*',
@pFilter VARCHAR(200) = '',
@pSort VARCHAR(200) = '',
@pPage INT = 1,
@pPageRows INT = 10
AS
SET NOCOUNT ON
DECLARE @vSQL VARCHAR(4000)
DECLARE @vTempTable VARCHAR(30)
DECLARE @vRowStart INT
DECLARE @vTotalRows INT
SET @vTempTable = '##Tmp' + CAST(DATEPART(YYYY, GETDATE()) AS VARCHAR(4)) +
CAST(DATEPART(MM, GETDATE()) AS VARCHAR(2)) +
CAST(DATEPART(DD, GETDATE()) AS VARCHAR(2)) +
CAST(DATEPART(HH, GETDATE()) AS VARCHAR(2)) +
CAST(DATEPART(MI, GETDATE()) AS VARCHAR(2)) +
CAST(DATEPART(SS, GETDATE()) AS VARCHAR(2)) +
CAST(DATEPART(MS, GETDATE()) AS VARCHAR(3))
SET @vSQL = 'SELECT ' + @pColumns + ', IDENTITY(INT, 1, 1) AS ROWID INTO ' + @vTempTable + ' FROM ' + @pTableName
IF @pFilter != '' AND @pFilter IS NOT NULL
SET @vSQL = @vSQL + ' WHERE ' + @pFilter
IF @pSort != '' AND @pSort IS NOT NULL
SET @vSQL = @vSQL + ' ORDER BY ' + @pSort
EXECUTE (@vSQL)
-- Get the total number of rows selected
SET @vTotalRows = @@ROWCOUNT
-- If page number = 0, set it to the first page
IF @pPage = 0
SET @pPage = 1
-- If page number is beyond the last page, set page to the last page
IF (@pPage * @pPageRows) > @vTotalRows
BEGIN
SET @pPage = @vTotalRows/@pPageRows
IF (@vTotalRows % @pPageRows) != 0
SET @pPage = @pPage + 1
END
SET @vRowStart = ((@pPage - 1) * @pPageRows) + 1
SET @vSQL = 'SELECT * FROM ' + @vTempTable + ' WHERE ROWID BETWEEN ' + CAST(@vRowStart AS VARCHAR(10)) +
' AND ' + CAST((@vRowStart + @pPageRows - 1) AS VARCHAR(10)) + ' ORDER BY ROWID'
EXECUTE (@vSQL)
SET @vSQL = 'DROP TABLE ' + @vTempTable
EXECUTE (@vSQL)
GO
यहाँ कैसे Northwing डेटाबेस का उपयोग कर इसका इस्तेमाल करने पर कुछ उदाहरण है:
EXECUTE [dbo].[GetPage] 'Customers', '*', '', '', 1, 10
EXECUTE [dbo].[GetPage] 'Customers', '*', '', 'CustomerID DESC', 1, 10
पुष्टि करने के लिए, यह मेरा काम नहीं है, लेकिन के सौजन्य से है http://www.eggheadcafe.com/PrintSearchContent.asp?LINKID=1055
चीयर्स, जॉन
में असमर्थित हैं यह मानता है कि वैल क्रमबद्ध कॉलम में ues अद्वितीय हैं। यदि आपके पास डेटा है जो आपके सॉर्ट कॉलम में दोहराता है, तो यह क्वेरी सही तरीके से निष्पादित नहीं हो सकती है। मान लीजिए कि आपकी क्वेरी वेतन के माध्यम से पेजिंग कर रही है और आपके पास 35 लोग हैं जो $ 40K कमाते हैं, 40 जो $ 50K और 20 $ 60K कमाते हैं। यदि आप 20 के पेज आकार के साथ इस समाधान का उपयोग करते हैं, तो आपका दूसरा "पृष्ठ" यहां पंक्ति 36 से शुरू होगा, उम्मीद के अनुसार 21 नहीं। – OneCleverMonkey