sql >> Database teknologi >  >> RDS >> Sqlserver

Brug af variabel med Dynamic SQL

Du har linjen AND ( @BG = ''''OR COM.BGName =''' + @BG +''' . `@BG' er ikke erklæret i din Dynamic SQL. Du skal videregive det, som du gjorde senere i samme linje:

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

Denne forespørgsel ser dog ud til at være åben for SQL-injektion; du ville være meget bedre stillet at parametrisere 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

Bemærk (som jeg ved, at folk har en vane med ikke at læse kommentarer, som folk efterlader til dem i deres kode) Jeg aner ikke, hvilken datatype for @BG og @Trans_date er, derfor har jeg antaget, at de er int og date henholdsvis. Du bliver nødt til at ændre dette, hvis jeg har gættet forkert.

Du kan se fra kommentarerne, at du har brug for at se på, hvordan du også tilføjer værdierne af kolonnerne til din forespørgsel; måden du har gjort det på kan også være åben for injektion, men jeg har ikke set den tidligere del af din forespørgsel.




  1. Linq til SQL ved hjælp af gruppe efter, og rækkefølge efter antal

  2. Hvordan man eksplicit cast type array literal i sqlalchemy ved hjælp af postgresql?

  3. Vil du reservere mySQL auto-incremented ID'er?

  4. Ikke mere SPU