You could use ROWCOUNT instead of SELECT TOP (@var) ... as:
ROWCOUNT
SELECT TOP (@var) ...
SET @var = ISNULL(@var, 0) SET ROWCOUNT @var SELECT * FROM ... SET ROWCOUNT 0
set ROWCOUNT 0 means all rows.
set ROWCOUNT 0