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

गतिशील एसक्यूएल के साथ चर का उपयोग करना

आपके पास लाइन है AND ( @BG = ''''OR COM.BGName =''' + @BG +''' . आपके डायनामिक SQL में `@BG' घोषित नहीं किया गया है। आपको इसे उसी तरह पास करना होगा जैसे आपने बाद में उसी पंक्ति में किया था:

AND   ( '' +  @BG + '' = '''' OR  COM.BGName =''' + @BG +'''

हालाँकि, यह क्वेरी SQL इंजेक्शन के लिए खुली हुई प्रतीत होती है; आप इसे पैरामीट्रिज़ करने से बहुत बेहतर होंगे:

SET @query = N'
SELECT ComponentName,
        '+ @cols + N'  --This might need to be changed as well, but i don''t know how you''re generating this and I''m not guessing
FROM (SELECT SUM(('+ @Sum_cols + N') AS Comp_stock, --This might need to be changed as well, but i don''t know how you''re generating this and I''m not guessing
             Com.ComponentName,
             BB.BB_Name  
      FROM Z_DM_DR_CM_STOCK COM
           INNER JOIN BLOOD_BANK_MASTER BB ON COM.BB_srno =BB.BB_SRNO
      WHERE Com.Trans_date = @sTrans_date
        AND (@sBG = '''' OR COM.BGName = @sBG )
      GROUP BY Com.ComponentName,
               BB.BB_Name) AS sourcetable 
PIVOT (
    --This might need to be changed as well, but i don''t know how you''re generating this and I''m not guessing
    SUM([Comp_stock]) FOR [BB_Name] IN ('+ @cols + N')) AS PIVOTTABLE
ORDER BY ComponentName';

EXEC sp_executesql @query, N'@sBG int, @sTrans_date date', @sBG = @BG, @sTrans_Date = @trans_date; --I have guessed your data types

नोट (जैसा कि मुझे पता है कि लोगों को उनके कोड में उनके लिए छोड़ी गई टिप्पणियों को नहीं पढ़ने की आदत होती है) मुझे नहीं पता कि @BG के लिए डेटा प्रकार क्या है और @Trans_date है, इस प्रकार मैंने अनुमान लगाया है कि वे int हैं और date क्रमश। अगर मैंने गलत अनुमान लगाया है, तो आपको इसे बदलना होगा।

आप टिप्पणियों से देख सकते हैं कि आपको यह देखने की आवश्यकता है कि आप अपनी क्वेरी में कॉलम के मान कैसे जोड़ते हैं; जिस तरह से आपने इसे किया है हो सकता है इंजेक्शन के लिए भी तैयार रहें, लेकिन मैंने आपकी क्वेरी का पिछला भाग नहीं देखा है।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. इसमें डालें... मर्ज करें... चुनें (एसक्यूएल सर्वर)

  2. SQL सर्वर (T-SQL) में एक स्ट्रिंग का बायाँ भाग प्राप्त करें

  3. एसक्यूएल ग्रुप बाय ईयर

  4. एकल कॉलम में कई पंक्तियाँ सम्मिलित करें

  5. SQL सर्वर दिनांक क्वेरी