Je to možné, ale vyžaduje to použití dynamického SQL.
Doporučuji přečíst Prokletí a požehnání dynamické SQL
než budete pokračovat...
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)
Dynamický SQL je pouze příkaz SQL, který se před provedením skládá jako řetězec. Dochází tedy k obvyklému zřetězení řetězců. Dynamické SQL je vyžadováno vždy, když chcete v syntaxi SQL provést něco, co není povoleno, například:
- jediný parametr představující seznam hodnot oddělených čárkami pro klauzuli IN
- proměnná reprezentující hodnotu i syntaxi SQL (IE:příklad, který jste uvedli)
EXEC sp_executesql
umožňuje používat parametry bind/preparedstatement, takže se nemusíte starat o únik jednoduchých uvozovek/atd. pro útoky SQL injection.