Anda memiliki baris AND ( @BG = ''''OR COM.BGName =''' + @BG +'''
. `@BG' tidak dideklarasikan dalam SQL Dinamis Anda. Anda harus meneruskannya seperti yang Anda lakukan nanti di baris yang sama:
AND ( '' + @BG + '' = '''' OR COM.BGName =''' + @BG +'''
Kueri ini, bagaimanapun, tampaknya terbuka untuk injeksi SQL; Anda akan jauh lebih baik memparametrikannya:
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
Catatan (seperti yang saya tahu orang memiliki kebiasaan untuk tidak membaca komentar yang ditinggalkan orang untuk mereka dalam kode mereka) Saya tidak tahu apa tipe data untuk @BG
dan @Trans_date
adalah, jadi saya telah menduga mereka adalah int
dan date
masing-masing. Anda harus mengubah ini, jika saya salah menebak.
Anda dapat melihat dari komentar bahwa Anda perlu melihat bagaimana Anda menambahkan nilai kolom ke kueri Anda juga; cara Anda melakukannya mungkin juga terbuka untuk injeksi, tetapi saya belum melihat bagian awal dari kueri Anda.