Du har linjen AND ( @BG = ''''OR COM.BGName =''' + @BG +'''
. `@BG' er ikke erklæret i din Dynamic SQL. Du skal videregive det, som du gjorde senere i samme linje:
AND ( '' + @BG + '' = '''' OR COM.BGName =''' + @BG +'''
Denne forespørgsel ser dog ud til at være åben for SQL-injektion; du ville være meget bedre stillet at parametrisere det:
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
Bemærk (som jeg ved, at folk har en vane med ikke at læse kommentarer, som folk efterlader til dem i deres kode) Jeg aner ikke, hvilken datatype for @BG
og @Trans_date
er, derfor har jeg antaget, at de er int
og date
henholdsvis. Du bliver nødt til at ændre dette, hvis jeg har gættet forkert.
Du kan se fra kommentarerne, at du har brug for at se på, hvordan du også tilføjer værdierne af kolonnerne til din forespørgsel; måden du har gjort det på kan også være åben for injektion, men jeg har ikke set den tidligere del af din forespørgsel.