आप एक 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;