Você tem a linha
AND ( @BG = ''''OR COM.BGName =''' + @BG +'''
. `@BG' não está declarado em seu SQL dinâmico. Você precisa passá-lo como fez mais tarde na mesma linha:AND ( '' + @BG + '' = '''' OR COM.BGName =''' + @BG +'''
Essa consulta, no entanto, parece estar aberta à injeção de SQL; seria muito melhor parametrizá-lo:
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
Nota (como eu sei que as pessoas têm o hábito de não ler os comentários que as pessoas deixam para eles em seu código) eu não tenho ideia de qual é o tipo de dados para
@BG
e @Trans_date
é, assim, eu calculei que eles são int
e date
respectivamente. Você precisará alterar isso, se eu tiver adivinhado incorretamente. Você pode ver nos comentários que você precisa ver como você adiciona os valores das colunas à sua consulta também; do jeito que você fez pode também estar aberto à injeção, mas não vi a parte anterior da sua consulta.