Bạn có dòng AND ( @BG = ''''OR COM.BGName =''' + @BG +'''
. `` @BG 'không được khai báo trong SQL động của bạn. Bạn cần chuyển nó giống như bạn đã làm sau này trong cùng một dòng:
AND ( '' + @BG + '' = '''' OR COM.BGName =''' + @BG +'''
Tuy nhiên, truy vấn này dường như mở cho SQL injection; bạn sẽ tốt hơn nhiều nếu tham số nó:
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
Lưu ý (như tôi biết mọi người có thói quen không đọc các nhận xét mà mọi người để lại cho họ trong mã của họ) Tôi không biết kiểu dữ liệu cho @BG
là gì và @Trans_date
là, do đó tôi đã định vị chúng là int
và date
tương ứng. Bạn sẽ cần phải thay đổi điều này, nếu tôi đoán không chính xác.
Bạn cũng có thể thấy từ các nhận xét mà bạn cần xem cách bạn thêm giá trị của các cột vào truy vấn của mình; theo cách bạn đã làm có thể cũng sẵn sàng để đưa vào, nhưng tôi chưa xem phần trước của truy vấn của bạn.