Es posible, pero requiere el uso de SQL dinámico.
Recomiendo leer La maldición y las bendiciones de la 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 es solo una instrucción SQL, compuesta como una cadena antes de ejecutarse. Entonces ocurre la concatenación de cadenas habitual. Se requiere SQL dinámico siempre que desee hacer algo en sintaxis SQL que no está permitido, como:
- un solo parámetro para representar una lista de valores separados por comas para una cláusula IN
- una variable para representar tanto el valor como la sintaxis SQL (IE:el ejemplo que proporcionó)
EXEC sp_executesql
le permite usar parámetros bind/preparedstatement para que no tenga que preocuparse por escapar de comillas simples/etc para ataques de inyección SQL.