Det er muligt, men det kræver brug af dynamisk SQL.
Jeg anbefaler at læse Dynamiske forbandelse og velsignelser SQL
før du fortsætter...
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)
Dynamisk SQL er blot en SQL-sætning, sammensat som en streng, før den udføres. Så den sædvanlige strengsammenkædning opstår. Dynamisk SQL er påkrævet, når du vil gøre noget i SQL-syntaks, som ikke er tilladt, f.eks.:
- en enkelt parameter til at repræsentere kommasepareret liste over værdier for en IN-sætning
- en variabel, der repræsenterer både værdi og SQL-syntaks (IE:det eksempel, du angav)
EXEC sp_executesql
giver dig mulighed for at bruge bind/preparedstatement-parametre, så du ikke behøver bekymre dig om at undslippe enkelte anførselstegn/etc for SQL-injektionsangreb.