Anda tidak dapat menggabungkan int ke string. Alih-alih:
SET @sql = N'DECLARE @Rt int; SET @Rt = ' + @RowTo;
Anda membutuhkan:
SET @sql = N'DECLARE @Rt int; SET @Rt = ' + CONVERT(VARCHAR(12), @RowTo);
Untuk membantu mengilustrasikan apa yang terjadi di sini. Katakanlah @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;
Untuk membuatnya menjadi string (bahkan jika pada akhirnya itu akan menjadi angka), saya perlu mengubahnya. Tapi seperti yang Anda lihat, nomor tersebut masih diperlakukan sebagai nomor saat dijalankan. Jawabannya adalah 25, kan?
Dalam kasus Anda, Anda dapat menggunakan parameterisasi yang tepat daripada menggunakan rangkaian yang, jika Anda terbiasa dengan kebiasaan itu, Anda akan mengekspos diri Anda ke injeksi SQL di beberapa titik (lihat ini dan ini:
SET @sql = @sql + ' WHERE RowNum BETWEEN @RowFrom AND @RowTo;';
EXEC sys.sp_executesql @sql,
N'@RowFrom int, @RowTo int',
@RowFrom, @RowTo;