Maybe redesign your procedure to return two recordsets: the count and the subset of records (page). Something like this:
ALTER PROCEDURE [dbo].[usp_Test_Select]
. . .
-- return the total number of rows
select count(*) from [dbo].[TestDB]
-- return the data
Select [ID]
[Name],
[City],
[Year]
from [dbo].[TestDB]
where [ID] between ((@Poll) + 1) and (@Poll)*@count
The caller code will need some simple adjustments to deal with two recordsets.
However, your core approach works only in case of “ideal” IDs, which start from 1 and do not have any gaps (that appear if you delete some rows, for example). This is not always possible. Consider the previous suggestions based on OFFSET or ROW_COUNT: https://learn.microsoft.com/answers/answers/85864/view.html, which can be adjusted to take into consideration the page size (@count).
Maybe notions like “pagination”, “page size” (instead of @count) and “page number” (replacing @joon ) better describe your needs.