Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

अदिश चर घोषित करना चाहिए

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर में Concat समूह

  2. SQL सर्वर सशर्त प्रवाह

  3. सी # से SQL सर्वर डेटाबेस में बाइट [] सहेजें

  4. SQL सर्वर में पहचान () संपत्ति का उपयोग कैसे करें

  5. SQL सर्वर में NEWID () बनाम NEWSEQUENTIALID ():क्या अंतर है?