STORED PROCEDURE
implement को लागू करने के कई तरीके हैं जो आपको चाहिए। उदाहरण के लिए आप ROW_NUMBER
. का उपयोग कर सकते हैं CTE SQL स्टेटमेंट के अंदर निर्माण।
यदि आप SQL Server 2012 का उपयोग करते हैं तो आप OFFSET
. का उपयोग कर सकते हैं और FETCH
ORDER BY
. के बाद पेजिनेशन लागू करने के लिए (देखें यहां
) मामले में SQL स्टेटमेंट संबंधित MySQL या PostgreSQL स्टेटमेंट के बहुत करीब दिखाई देगा जो OFFSET
का उपयोग करता है और LIMIT
. वैसे Microsoft Entity Framework Entity SQL Language
का उपयोग करता है। करीबी निर्माण (SKIP
और LIMIT
) शायद OFFSET
और FETCH
यदि आप SQL Server 2012 या उच्चतर का उपयोग करते हैं तो यह पसंदीदा तरीका होगा।
चूंकि आपने अपने प्रश्न में SQL Server 2008 टैग शामिल किया है, इसलिए मैं अपने उत्तर में नए SQL Server 2012 निर्माणों का उपयोग नहीं करूंगा।
sp_executesql
. का उपयोग करने का एक और अच्छा तरीका होगा जो आपको पैरामीटर के साथ स्ट्रिंग के रूप में एक SQL कथन बनाने की अनुमति देता है। यह निष्पादन योजनाओं का पुन:उपयोग करने की अनुमति देता है जो सर्वोत्तम प्रदर्शन के लिए बहुत महत्वपूर्ण है। दृष्टिकोण आपको अपने STORED PROCEDURE
. के कोड का विस्तार करने की अनुमति देता है सर्वर साइड फ़िल्टरिंग (खोज) लागू करने के लिए।
मैं देखता हूं कि SQL कथन में पेजिनेशन लागू करने की आवश्यकता है जिसमें लौटाए गए डेटा की आईडी शामिल है (PersonId
आपके मामले में)। इसलिए मैं आपको सरल तरीके से उपयोग करने का सुझाव देने का निर्णय लेता हूं जो SELECT TOP
. का उपयोग करें LEFT OUTER JOIN
के साथ संयोजन में ।
आप STORED PROCEDURE
dbo.GetExtraPerson
int
. प्रकार के दो अतिरिक्त पैरामीटर हो सकते हैं :@skip
और @pageSize
. @skip
. के मामले में 0
. के बराबर है STORED PROCEDURE
बस निष्पादित कर सकते हैं
SELECT TOP (@pageSize) PERS.PersonId
,PERS.FirstName
,PERS.LastName
,PERS.MobileNumber
,PERS.EmailId
,PERS.PersonNumber
,E.ExtraPersonId
,E.Diabetes
,E.BloodPressure
FROM ExtraPerson E
INNER JOIN Person PERS ON PERS.PersonId=E.PersonId
WHERE [email protected] AND [email protected] AND E.IsDeleted=0
अगर @skip
0
. के बराबर नहीं है तो संबंधित SQL कथन निम्नलिखित हो सकता है
WITH GetAll AS (
SELECT PERS.PersonId
,PERS.FirstName
,PERS.LastName
,PERS.MobileNumber
,PERS.EmailId
,PERS.PersonNumber
,E.ExtraPersonId
,E.Diabetes
,E.BloodPressure
FROM ExtraPerson E
INNER JOIN Person PERS ON PERS.PersonId=E.PersonId
WHERE [email protected] AND [email protected] AND E.IsDeleted=0
),GetFirst AS (
SELECT TOP (@skip) *
FROM GetAll
ORDER BY Name
),GetNext AS (
SELECT TOP (@pageSize) a.*
FROM GetAll AS a
LEFT OUTER JOIN GetFirst AS f ON f.Id=a.Id
WHERE f.Id IS NULL
ORDER BY Name
)
SELECT * FROM GetNext
dbo.GetExtraPerson
. का पूरा कोड निम्नलिखित के बारे में हो सकता है
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE dbo.GetExtraPerson
@CampId int,
@ReferencePatientId bigint,
@skip int,
@pageSize int
AS
BEGIN
DECLARE @records int;
SET NOCOUNT ON;
SET @records = (SELECT COUNT(*)
FROM ExtraPerson E
INNER JOIN Person PERS ON PERS.PersonId=E.PersonId
WHERE [email protected]
AND [email protected]
AND E.IsDeleted=0);
IF @skip <= 0
SELECT TOP (@pageSize) PERS.PersonId
,PERS.FirstName
,PERS.LastName
,PERS.MobileNumber
,PERS.EmailId
,PERS.PersonNumber
,E.ExtraPersonId
,E.Diabetes
,E.BloodPressure
FROM ExtraPerson E
INNER JOIN Person PERS ON PERS.PersonId=E.PersonId
WHERE [email protected] AND [email protected]
AND E.IsDeleted=0
ELSE
WITH GetAll AS (
SELECT PERS.PersonId
,PERS.FirstName
,PERS.LastName
,PERS.MobileNumber
,PERS.EmailId
,PERS.PersonNumber
,E.ExtraPersonId
,E.Diabetes
,E.BloodPressure
FROM ExtraPerson E
INNER JOIN Person PERS ON PERS.PersonId=E.PersonId
WHERE [email protected] AND [email protected]
AND E.IsDeleted=0
),GetFirst AS (
SELECT TOP (@skip) *
FROM GetAll
ORDER BY Name
),GetNext AS (
SELECT TOP (@pageSize) a.*
FROM GetAll AS a
LEFT OUTER JOIN GetFirst AS f ON f.Id=a.Id
WHERE f.Id IS NULL
ORDER BY Name
)
SELECT * FROM GetNext;
RETURN @records;
END
GO
उपरोक्त प्रक्रिया अतिरिक्त रूप से रिकॉर्ड की कुल संख्या लौटाती है और आप इसका उपयोग totalRecords
असाइन करने के लिए कर सकते हैं मूल्य।
यदि आप उपरोक्त कोड का उपयोग sp_executesql
. के संयोजन में करेंगे तो आप ORDER BY
शामिल करने के लिए कोड को आसानी से संशोधित कर सकते हैं सभी में SELECT TOP
कथन ताकि लौटाए गए मान उपयोगकर्ता द्वारा jqGrid में अनुरोधित सॉर्टिंग क्रम से मेल खाते हों।