Du kan ikke sammenkæde en int til en streng. I stedet for:
SET @sql = N'DECLARE @Rt int; SET @Rt = ' + @RowTo;
Du skal bruge:
SET @sql = N'DECLARE @Rt int; SET @Rt = ' + CONVERT(VARCHAR(12), @RowTo);
For at hjælpe med at illustrere, hvad der sker her. Lad os sige @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;
For at bygge det ind i en streng (selvom det i sidste ende bliver et tal), skal jeg konvertere det. Men som du kan se, behandles nummeret stadig som et tal, når det udføres. Svaret er 25, ikke?
I dit tilfælde kan du bruge korrekt parameterisering i stedet for at bruge sammenkædning, som, hvis du får den vane, vil udsætte dig selv for SQL-injektion på et tidspunkt (se dette og dette:
SET @sql = @sql + ' WHERE RowNum BETWEEN @RowFrom AND @RowTo;';
EXEC sys.sp_executesql @sql,
N'@RowFrom int, @RowTo int',
@RowFrom, @RowTo;