Не можете да свържете int към низ. Вместо:
SET @sql = N'DECLARE @Rt int; SET @Rt = ' + @RowTo;
Нуждаете се от:
SET @sql = N'DECLARE @Rt int; SET @Rt = ' + CONVERT(VARCHAR(12), @RowTo);
За да илюстрирам какво се случва тук. Да кажем @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;
За да го вградя в низ (дори в крайна сметка това да е число), трябва да го преобразувам. Но както можете да видите, числото все още се третира като число, когато се изпълни. Отговорът е 25, нали?
Във вашия случай можете да използвате правилна параметризация, вместо да използвате конкатенация, която, ако придобиете този навик, в даден момент ще се изложите на SQL инжекция (вижте това и това:
SET @sql = @sql + ' WHERE RowNum BETWEEN @RowFrom AND @RowTo;';
EXEC sys.sp_executesql @sql,
N'@RowFrom int, @RowTo int',
@RowFrom, @RowTo;