Je kunt een int niet samenvoegen tot een string. In plaats van:
SET @sql = N'DECLARE @Rt int; SET @Rt = ' + @RowTo;
Je hebt nodig:
SET @sql = N'DECLARE @Rt int; SET @Rt = ' + CONVERT(VARCHAR(12), @RowTo);
Om te helpen illustreren wat hier gebeurt. Laten we zeggen @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;
Om dat in een string te bouwen (zelfs als het uiteindelijk een getal zal zijn), moet ik het converteren. Maar zoals u kunt zien, wordt het nummer nog steeds als een nummer behandeld wanneer het wordt uitgevoerd. Het antwoord is 25, toch?
In jouw geval kun je de juiste parametrisering gebruiken in plaats van aaneenschakelingen. Als je die gewoonte aanneemt, zul je jezelf op een gegeven moment blootstellen aan SQL-injectie (zie dit en dit:
SET @sql = @sql + ' WHERE RowNum BETWEEN @RowFrom AND @RowTo;';
EXEC sys.sp_executesql @sql,
N'@RowFrom int, @RowTo int',
@RowFrom, @RowTo;