Възможно е, но изисква използването на динамичен SQL.
Препоръчвам да прочетете Проклятието и благословията на динамичния SQL
преди да продължите...
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 е просто SQL оператор, съставен като низ, преди да бъде изпълнен. Така се получава обичайното конкатениране на низове. Динамичният SQL се изисква винаги, когато искате да направите нещо в SQL синтаксиса, което не е разрешено, като:
- единичен параметър за представяне на разделен със запетаи списък със стойности за IN клауза
- променлива за представяне както на стойност, така и на SQL синтаксис (IE:примерът, който предоставихте)
EXEC sp_executesql
ви позволява да използвате параметри bind/preparedstatement, така че да не се налага да се притеснявате от избягване на единични кавички/и т.н. за атаки с SQL инжектиране.