Vous avez la ligne AND ( @BG = ''''OR COM.BGName =''' + @BG +'''
. `@BG' n'est pas déclaré dans votre Dynamic SQL. Vous devez le passer comme vous l'avez fait plus tard dans la même ligne :
AND ( '' + @BG + '' = '''' OR COM.BGName =''' + @BG +'''
Cette requête, cependant, semble être ouverte à l'injection SQL ; mieux vaut le paramétrer :
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
Remarque (comme je sais que les gens ont l'habitude de ne pas lire les commentaires que les gens leur laissent dans leur code), je n'ai aucune idée du type de données pour @BG
et @Trans_date
est, donc j'ai deviné qu'ils sont int
et date
respectivement. Vous devrez changer cela, si j'ai mal deviné.
Vous pouvez voir dans les commentaires que vous devez également examiner la façon dont vous ajoutez les valeurs des colonnes à votre requête ; la façon dont vous l'avez fait peut également être ouvert à l'injection, mais je n'ai pas vu la première partie de votre requête.