SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[GetPagedRecords] 
@TableName varchar(100),
@pageSize int,
@page int,
@filter varchar(max) = null,
@order varchar(100) = null
AS
BEGIN

declare @sql varchar(max)

select @sql = '
with paged as (
	select row_number() over (order by ' + 
	case 
		when @order is null then '@@IDENTITY' 
		else @order 
	end +
	') as ''RowNum'', *
	from ' + @TableName + 
	case
		when @filter is null then ''
		else ' where ' + @filter
	end +
 ')
 select * from paged  where (RowNum between ' + 
 Convert(varchar, (@page - 1) * @pageSize) + ' and ' + 
 Convert(varchar, (@page * @pageSize)) + ');'
 
 exec(@sql)
		
END