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

Erklær variabel for en forespørgselsstreng

Det er muligt, men det kræver brug af dynamisk SQL.
Jeg anbefaler at læse Dynamiske forbandelse og velsignelser SQL før du fortsætter...

DECLARE @theDate varchar(60)
SET @theDate = '''2010-01-01'' AND ''2010-08-31 23:59:59'''

DECLARE @SQL VARCHAR(MAX)  
SET @SQL = 'SELECT AdministratorCode, 
                   SUM(Total) as theTotal, 
                   SUM(WOD.Quantity) as theQty, 
                   AVG(Total) as avgTotal, 
                  (SELECT SUM(tblWOD.Amount)
                     FROM tblWOD
                     JOIN tblWO on tblWOD.OrderID = tblWO.ID
                    WHERE tblWO.Approved = ''1''
                      AND tblWO.AdministratorCode = tblWO.AdministratorCode
                      AND tblWO.OrderDate BETWEEN '+ @theDate +')'

EXEC(@SQL)

Dynamisk SQL er blot en SQL-sætning, sammensat som en streng, før den udføres. Så den sædvanlige strengsammenkædning opstår. Dynamisk SQL er påkrævet, når du vil gøre noget i SQL-syntaks, som ikke er tilladt, f.eks.:

  • en enkelt parameter til at repræsentere kommasepareret liste over værdier for en IN-sætning
  • en variabel, der repræsenterer både værdi og SQL-syntaks (IE:det eksempel, du angav)

EXEC sp_executesql giver dig mulighed for at bruge bind/preparedstatement-parametre, så du ikke behøver bekymre dig om at undslippe enkelte anførselstegn/etc for SQL-injektionsangreb.



  1. MySQL Hvis der findes, indsæt i eller gør noget andet

  2. SQL . SP eller funktionen skal beregne den næste dato for fredag

  3. indsætte og opdatere med lagret procedure

  4. Hvorfor producerer fputcsv duplikerede kolonner?