Nemůžete zřetězit int do řetězce. Místo:
SET @sql = N'DECLARE @Rt int; SET @Rt = ' + @RowTo;
Potřebujete:
SET @sql = N'DECLARE @Rt int; SET @Rt = ' + CONVERT(VARCHAR(12), @RowTo);
Abychom pomohli ilustrovat, co se zde děje. Řekněme @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;
Abych to zabudoval do řetězce (i když to nakonec bude číslo), musím to převést. Ale jak vidíte, číslo je po provedení stále považováno za číslo. Odpověď je 25, že?
Ve vašem případě můžete použít správnou parametrizaci spíše než použít zřetězení, které, pokud si osvojíte tento zvyk, vystavíte se v určité chvíli SQL injection (viz toto a toto:
SET @sql = @sql + ' WHERE RowNum BETWEEN @RowFrom AND @RowTo;';
EXEC sys.sp_executesql @sql,
N'@RowFrom int, @RowTo int',
@RowFrom, @RowTo;