आपके पास लाइन है 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
क्रमश। अगर मैंने गलत अनुमान लगाया है, तो आपको इसे बदलना होगा।
आप टिप्पणियों से देख सकते हैं कि आपको यह देखने की आवश्यकता है कि आप अपनी क्वेरी में कॉलम के मान कैसे जोड़ते हैं; जिस तरह से आपने इसे किया है हो सकता है इंजेक्शन के लिए भी तैयार रहें, लेकिन मैंने आपकी क्वेरी का पिछला भाग नहीं देखा है।