Hi HSawa,
Regarding your description, are you looking for a pagination implementation in SQL Server? If so, you can refer to below sample.
CREATE TABLE [USERS] (
[tableID] INTEGER NULL,
[userName] VARCHAR(255) NULL,
[hiddenRecord] INTEGER NULL
);
GO
INSERT INTO [USERS]([tableID],[userName],[hiddenRecord]) VALUES(1,'Macy',0),(2,'Gwendolyn',1),(3,'Charissa',0),(4,'Ayanna',1),(5,'Upton',0),(6,'Blaze',0),(7,'Genevieve',0),(8,'Isabella',0),(9,'Bethany',1),(10,'Pearl',1);
INSERT INTO [USERS]([tableID],[userName],[hiddenRecord]) VALUES(11,'Brennan',1),(12,'Rhona',0),(13,'Alexa',1),(14,'Amy',1),(15,'Colorado',1),(16,'Tana',1),(17,'Seth',1),(18,'Carson',0),(19,'Stone',1),(20,'Channing',0);
DECLARE @pageNum INT = 3 --PAGE 1
DECLARE @pageSize INT = 3 -- 3 users in a page
;WITH Cte AS
(
SELECT *, (ROW_NUMBER() OVER(ORDER BY tableID)-1)/@pageSize rn FROM USERS
)
SELECT tableID,userName,hiddenRecord FROM CTE
WHERE RN = @pageNum-1
--in SQL SERVER 2012 and onward
SELECT * FROM USERS ORDER BY tableID OFFSET (@pageNum-1)*@pageSize ROWS FETCH NEXT @pageSize ROWS ONLY
DROP TABLE [USERS]
Regarding the last page, have no idea on what value gets passed from your application end, you would have to add IF branch in the T-SQL to get the last page accordingly.
If you have any question, feel free to let me know.