Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

संग्रहीत प्रक्रिया में jqGrid के लिए पेजिंग कैसे करें?

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 में अनुरोधित सॉर्टिंग क्रम से मेल खाते हों।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. टी-एसक्यूएल का उपयोग करके विदेशी कुंजी बाधाओं को अस्थायी रूप से कैसे अक्षम किया जा सकता है?

  2. कोल्डफ्यूजन 10/विंडोज 7 प्रो 64 बिट कनेक्शन सत्यापन डेटा स्रोत के लिए विफल रहा

  3. SQL सर्वर में डेटा कैसे स्टोर किया जाता है?

  4. टेक्स्ट सेट करें SQL सर्वर में काम नहीं कर रहा है? इसे देखो।

  5. एक एसक्यूएल फ़ंक्शन के भीतर एक आईएन क्लॉज में एक वैरिएबल पास करना?