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;