Create procedure [dbo]. [GetRecordFromPage] @ SelectList VARCHAR (2000), -- List of fields to be selected @ TableSource VARCHAR (100), -- table name or View chart @ SearchCondition VARCHAR (2000), -- query condition @ OrderExpression VARCHAR (1000), -- sort expression @ PageIndex INT = 1, -- page number, starting from 0 @ PageSize INT = 10 -- page size AS BEGIN IF @ SelectList is null or ltrim (RTRIM (@ SelectList) ='' BEGIN SET @ SelectList = '*' END PRINT @ SelectList SET @ SearchCondition = ISNULL (@ SearchCondition ,'') SET @ SearchCondition = LTRIM (RTRIM (@ SearchCondition )) IF @ SearchCondition <>'' BEGIN If upper (SUBSTRING (@ SearchCondition, 1, 5) <> 'where' BEGIN SET @ SearchCondition = 'where' + @ SearchCondition END END PRINT @ SearchCondition SET @ OrderExpression = ISNULL (@ OrderExpression ,'') SET @ OrderExpression = LTRIM (RTRIM (@ OrderExpression )) IF @ OrderExpression <>'' BEGIN If upper (SUBSTRING (@ OrderExpression, 1, 5) <> 'where' BEGIN SET @ OrderExpression = 'Order by' + @ OrderExpression END END PRINT @ OrderExpression IF @ PageIndex is null or @ PageIndex <1 BEGIN SET @ PageIndex = 1 END PRINT @ PageIndex IF @ PageSize is null or @ PageSize <1 BEGIN SET @ PageSize = 10 END PRINT @ PageSize DECLARE @ SqlQuery VARCHAR (4000) SET @ SqlQuery = 'select' + @ SelectList + ', RowNumber FROM (SELECT '+ @ SelectList +', ROW_NUMBER () OVER ('+ @ OrderExpression +') AS RowNumber FROM '+ @ TableSource + ''+ @ SearchCondition +') AS RowNumberTableSource WHERE RowNumber BETWEEN '+ CAST (@ PageIndex-1) * @ PageSize + 1) as varchar) + 'And' + CAST (@ PageIndex * @ PageSize) as varchar) -- Order by '+ @ OrderExpression PRINT @ SqlQuery SET NOCOUNT ON EXECUTE (@ SqlQuery) SET NOCOUNT OFF RETURN @ RowCount END |