No se puede concatenar un int a una cadena. En lugar de:
SET @sql = N'DECLARE @Rt int; SET @Rt=" + @RowTo;
Necesitas:
SET @sql = N"DECLARE @Rt int; SET @Rt=" + CONVERT(VARCHAR(12), @RowTo);
Para ayudar a ilustrar lo que está sucediendo aquí. 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 eso en una cadena (incluso si finalmente será un número), necesito convertirlo. Pero como puede ver, el número todavía se trata como un número cuando se ejecuta. La respuesta es 25, ¿verdad?
En su caso, puede usar la parametrización adecuada en lugar de usar la concatenación que, si adquiere ese hábito, se expondrá a la inyección de SQL en algún momento (consulte esta y esta:
SET @sql = @sql + ' WHERE RowNum BETWEEN @RowFrom AND @RowTo;';
EXEC sys.sp_executesql @sql,
N'@RowFrom int, @RowTo int',
@RowFrom, @RowTo;