No puede concatenar un int con una cadena. En vez de:
SET @sql = N'DECLARE @Rt int; SET @Rt=" + @RowTo;
Necesitas:
SET @sql = N"DECLARE @Rt int; SET @Rt=" + CONVERT(VARCHAR(12), @RowTo);
Para 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 esto en una cadena (aunque en última instancia será un número), necesito convertirlo. Pero como puede ver, la ejecución aún trata el número como un número. La respuesta es 25, ¿verdad?
En su caso, puede usar la parametrización adecuada en lugar de usar la concatenación que, una vez que se acostumbre, eventualmente lo expondrá a la inyección de SQL (vea esto y esto:
SET @sql = @sql + ' WHERE RowNum BETWEEN @RowFrom AND @RowTo;';
EXEC sys.sp_executesql @sql,
N'@RowFrom int, @RowTo int',
@RowFrom, @RowTo;