sql >> Databasteknik >  >> RDS >> Sqlserver

Deklarera variabel för en frågesträng

Det är möjligt, men det kräver att du använder dynamisk SQL.
Jag rekommenderar att du läser Dynamiskas förbannelse och välsignelser SQL innan 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 är bara en SQL-sats, sammansatt som en sträng innan den exekveras. Så den vanliga strängsammansättningen inträffar. Dynamisk SQL krävs när du vill göra något i SQL-syntax som inte är tillåtet, som:

  • en enda parameter för att representera kommaseparerad lista med värden för en IN-sats
  • en variabel som representerar både värde och SQL-syntax (IE:exemplet du angav)

EXEC sp_executesql låter dig använda bind/preparedstatement-parametrar så att du inte behöver bry dig om att undvika enstaka citattecken/etc för SQL-injektionsattacker.



  1. SQL Server 2008 personsökningsmetoder?

  2. Skillnad i tid som krävs för att infoga InnoDB/MyISAM-poster

  3. Hur använder man för varje slinga när man infogar arrays i mysql med Codeigniter?

  4. Pymysql Insert Into fungerar inte