È possibile, ma richiede l'utilizzo di SQL dinamico.
Raccomando di leggere La maledizione e le benedizioni della dinamica SQL
prima di continuare...
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)
Dynamic SQL è solo un'istruzione SQL, composta come una stringa prima di essere eseguita. Quindi si verifica la solita concatenazione di stringhe. L'SQL dinamico è richiesto ogni volta che vuoi fare qualcosa nella sintassi SQL che non è consentita, come:
- un singolo parametro per rappresentare un elenco di valori separato da virgole per una clausola IN
- una variabile per rappresentare sia il valore che la sintassi SQL (IE:l'esempio che hai fornito)
EXEC sp_executesql
ti consente di utilizzare i parametri bind/preparedstatement in modo da non doverti preoccupare di sfuggire a virgolette singole/ecc per attacchi SQL injection.