Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Sử dụng biến với SQl động

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à intdate 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.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 3 cách để trích xuất năm từ một ngày trong SQL Server (T-SQL)

  2. Sự khác biệt giữa khóa duy nhất với ràng buộc 'không null' và khóa chính là gì?

  3. DATETIMEOFFSETFROMPARTS () Ví dụ trong SQL Server (T-SQL)

  4. Gọi một thủ tục được lưu trữ với tham số trong c #

  5. Ghi tệp csv vào cơ sở dữ liệu SQL Server bằng python