Это возможно, но требует использования динамического 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
позволяет использовать параметры связывания / подготовленного состояния, поэтому вам не нужно заботиться о экранировании одинарных кавычек/ etc для атак с использованием SQL-инъекций.