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
@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
Post a Comment