Dynamic query paging using MSSQL Server Without Offset

CREATE PROCEDURE [dbo].[SPPaging] 
 @CurrentIndex AS INT, 
 @PageSize AS INT, 
 @SortColumn AS VARCHAR(MAX), 
 @SortOrder AS VARCHAR(10), 
 @TotalRecord AS INT OUTPUT, 
 @WhereClause AS VARCHAR(MAX) 
AS 
BEGIN 
BEGIN TRY 
   DECLARE @LowerBound AS INT, 
   @UpperBound AS INT, 
   @Sql AS NVARCHAR(MAX), 
   @ParmDefinition AS NVARCHAR(MAX); 
   SET @LowerBound = @CurrentIndex; 
   SET @UpperBound = (@CurrentIndex - 1) + @PageSize; 
 BEGIN TRANSACTION   

 
    EXEC('SELECT A.* FROM(SELECT ROW_NUMBER() OVER(ORDER BY ' + @SortColumn+ ' ' +  @SortOrder+ ')SrNo,D.Id, 
    D.FirstName, 
    D.LastName,
    D.CreatedDate
    FROM [dbo].[Driver] D
    LEFT JOIN [dbo].[Intermediate] I on I.[IntermediateID]=D.[IntermediateID] ' + @WhereClause + ')A 
    WHERE SrNo >= ' + @LowerBound + ' AND SrNo <= ' + @UpperBound + ''); 
 
    SET @Sql = 'SELECT @retvalOUT = COUNT(*) FROM(SELECT ROW_NUMBER() OVER(ORDER BY ' + @SortColumn+ ' ' +  @SortOrder+ ')SrNo,D.Id, 
    D.FirstName, 
    D.LastName,
    D.CreatedDate
    FROM [dbo].[Driver] D
    LEFT JOIN [dbo].[Intermediate] I on I.[IntermediateID]=D.[IntermediateID] ' + @WhereClause + ')A';   
 
    SET @ParmDefinition = N'@retvalOUT int OUTPUT'; 
 
    EXEC sp_executesql @Sql, @ParmDefinition, @retvalOUT=@TotalRecord OUTPUT; 
    SELECT @TotalRecord; 
 
 
  COMMIT TRANSACTION     
     
 END TRY       
 BEGIN CATCH     
 
  IF @@TRANCOUNT > 0       
    ROLLBACK TRANSACTION  --RollBack in case of Error       
         
   DECLARE @ErrorMessage NVARCHAR(4000);       
   DECLARE @ErrorSeverity INT;       
   DECLARE @ErrorState INT;       
       
   SELECT @ErrorMessage = ERROR_MESSAGE(),       
    @ErrorSeverity = ERROR_SEVERITY(),       
    @ErrorState = ERROR_STATE();       
         
   RAISERROR(@ErrorMessage,@ErrorSeverity,@ErrorState);         
       
 END CATCH   
END 

Comments

Popular posts from this blog

SECURING WEBAPI USING JSON WEB TOKEN (JWT) IN WEB API C#

Adding ASP.NET MVC5 Identity Authentication to an existing project

Multiple model pass in MVC using tuple or Tuple in MVC