Você não pode concatenar um int para uma string. Ao invés de:
SET @sql = N'DECLARE @Rt int; SET @Rt = ' + @RowTo;
Você precisa:
SET @sql = N'DECLARE @Rt int; SET @Rt = ' + CONVERT(VARCHAR(12), @RowTo);
Para ajudar a ilustrar o que está acontecendo aqui. Digamos @RowTo =5.
DECLARE @RowTo int;
SET @RowTo = 5;
DECLARE @sql nvarchar(max);
SET @sql = N'SELECT ' + CONVERT(varchar(12), @RowTo) + ' * 5';
EXEC sys.sp_executesql @sql;
Para construir isso em uma string (mesmo que no final seja um número), preciso convertê-lo. Mas como você pode ver, o número ainda é tratado como um número quando é executado. A resposta é 25, certo?
No seu caso você pode usar a parametrização adequada ao invés de usar a concatenação que, se você adquirir esse hábito, irá se expor a injeção de SQL em algum momento (veja isso e isso:
SET @sql = @sql + ' WHERE RowNum BETWEEN @RowFrom AND @RowTo;';
EXEC sys.sp_executesql @sql,
N'@RowFrom int, @RowTo int',
@RowFrom, @RowTo;