sql >> Databasteknik >  >> RDS >> Sqlserver

Använda Variable med Dynamic SQL

Du har raden AND ( @BG = ''''OR COM.BGName =''' + @BG +''' . `@BG' deklareras inte i din Dynamic SQL. Du måste skicka det som du gjorde senare på samma rad:

AND   ( '' +  @BG + '' = '''' OR  COM.BGName =''' + @BG +'''

Den här frågan verkar dock vara öppen för SQL-injektion; du skulle vara mycket bättre av att parametrisera 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

Notera (eftersom jag vet att folk inte har en vana att inte läsa kommentarer som folk lämnar åt dem i sin kod) Jag har ingen aning om vilken datatyp för @BG och @Trans_date är, så jag har gissat att de är int och date respektive. Du måste ändra detta om jag har gissat fel.

Du kan se från kommentarerna att du behöver titta på hur du lägger till värdena för kolumnerna i din fråga också; hur du har gjort det kan också vara öppen för injektion, men jag har inte sett den tidigare delen av din fråga.




  1. mysql LIKE-frågan tar för lång tid

  2. Bästa DB (MySQL) struktur:Artiklar som innehåller favorittaggar

  3. SQL Server Automatiserade säkerhetskopior

  4. Hur vet man om en MySQL UPDATE-fråga misslyckas eftersom information som tillhandahålls matchar data som redan finns i databasen?