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.