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

SQL सर्वर:Msg 102, लेवल 15, स्टेट 1, लाइन 2 '=' के पास गलत सिंटैक्स

मेरा मानना ​​है कि इसे निष्पादित करने से पहले आपको अपने SQL कथन को समग्र रूप से एक साथ जोड़ना होगा:

DECLARE 
    @TableA nvarchar(255)='TableA',
    @DOCID1 nvarchar(MAX),
    @SqlStmt NVARCHAR(500),
    @DOCID2 int;

SET @SqlStmt = N'SELECT TOP (1) ' + @DOCID1 + N' = DOCID1, ' + @DOCID2 + N' = DOCID2 FROM [' + @TABLEA + N'] ORDER BY DOCID2';

EXEC (@SqlStmt)

जहां तक ​​मुझे याद है, आप EXEC . के अंदर भाव और गणना नहीं कर सकते हैं कमांड - पहले से स्टेटमेंट तैयार करवाएं, फिर उस पर अमल करें

साथ ही, मुझे पूरा यकीन नहीं है कि आपके वेरिएबल में क्या है - @DocID1 और @DocID2 - क्या आप उनका मान सेट करना चाहते हैं, या क्या वे सेट करने के लिए किसी अन्य चर का नाम रखते हैं ??

अपडेट करें: यदि आप वास्तव में @DocID1 . के मान सेट करना चाहते हैं और @DocID2 , तो आपकी क्वेरी शुरू में गलत थी - तब आपको कुछ इस तरह की आवश्यकता होगी:

DECLARE 
    @TableA nvarchar(255) = 'TableA',
    @SqlStmt NVARCHAR(500);

SET @SqlStmt = 
    N'DECLARE @DocID1 NVARCHAR(MAX), @DocID2 INT; ' +
    N'SELECT TOP (1) @DOCID1 = DOCID1, @DOCID2 = DOCID2 FROM [' + @TABLEA + N'] ORDER BY DOCID2';

EXEC (@SqlStmt)

लेकिन फिर, उन दो चरों का दायरा अंदर . है गतिशील रूप से निष्पादित SQL और आपकी स्क्रिप्ट के "बाहर" के लिए उपलब्ध नहीं हैं।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एसक्यूएल सर्वर 2016

  2. बुरी आदतें:SQL सर्वर में NULL से बचना

  3. SQL सर्वर 2005 में लेन () बनाम डेटालेंथ ()

  4. SQL सर्वर तालिका नाम मान्य करने के लिए नियमित अभिव्यक्ति

  5. SQL सर्वर में विभिन्न फ़ील्ड से अधिकतम मान प्राप्त करें और संबंधित मान दिखाएं