CREATE PROCEDURE sp_GetPagedSortedData
@TableName nvarchar(200)
,@SortEx nvarchar(500)
,@FieldsList nvarchar(1000) = '*'
,@FilterEx nvarchar(1000) = ''
,@PageNumber int = 1
,@PageSize int = NULL
,@TotalRowsNum int output
AS
BEGIN
DECLARE @sql nvarchar(max)
DECLARE @RowStart int
DECLARE @RowEnd int
SET @TotalRowsNum =0
SET @FilterEx = '1 = 1'+@FilterEx
IF @PageSize IS NULL BEGIN
SET @sql = 'SELECT ' + @FieldsList +
' FROM ' + @TableName +
' WHERE ' + @FilterEx +
' ORDER BY ' + @SortEx
EXEC (@sql)
END
ELSE
BEGIN
SET @sql = 'SELECT @TotalRowsNum = COUNT(*) FROM ' + @TableName +
' WHERE ' + @FilterEx
EXEC sp_executeSQL @sql, @params = N'@TotalRowsNum INT OUTPUT',
@TotalRowsNum = @TotalRowsNum OUTPUT
SET @PageNumber = ABS(@PageNumber)
SET @PageSize = ABS(@PageSize)
IF @PageNumber < 1 SET @PageNumber = 1
IF @PageSize < 1 SET @PageSize = 1
SET @RowStart = ((@PageNumber - 1) * @PageSize)
SET @RowEnd = @RowStart + @PageSize + 1
SET @sql = 'SELECT '
+ @FieldsList + ' FROM (SELECT ROW_NUMBER() OVER(ORDER BY ' +
@SortEx + ') AS row, ' +
@FieldsList + ' FROM ' +
@TableName + ' WHERE ' +
@FilterEx
+ ') AS tbl WHERE row > '
+ CONVERT(varchar(9), @RowStart)
+ ' AND row < ' + CONVERT(varchar(9), @RowEnd)
EXEC (@sql)
END
END
PS. Підсвітку синтаксису робив за допомогою сервісу tohtml