É possível, mas requer o uso de SQL dinâmico.
Recomendo a leitura de A maldição e as bênçãos da dinâmica SQL antes de continuar...
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)
SQL dinâmico é apenas uma instrução SQL, composta como uma string antes de ser executada. Assim, ocorre a concatenação de strings usual. O SQL dinâmico é necessário sempre que você deseja fazer algo na sintaxe SQL que não é permitido, como:
- um único parâmetro para representar a lista de valores separados por vírgulas para uma cláusula IN
- uma variável para representar valor e sintaxe SQL (IE:o exemplo que você forneceu)
EXEC sp_executesql
permite que você use parâmetros bind/preparedstatement para que você não precise se preocupar em escapar de aspas simples/etc para ataques de injeção de SQL.