Es ist möglich, aber es erfordert die Verwendung von dynamischem SQL.
Ich empfehle, Fluch und Segen der Dynamik zu lesen SQL
bevor Sie fortfahren...
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)
Dynamisches SQL ist nur eine SQL-Anweisung, die vor der Ausführung als Zeichenfolge zusammengesetzt wird. Es findet also die übliche Zeichenfolgenverkettung statt. Dynamisches SQL ist immer dann erforderlich, wenn Sie etwas in der SQL-Syntax tun möchten, das nicht erlaubt ist, wie zum Beispiel:
- ein einzelner Parameter zur Darstellung einer durch Kommas getrennten Liste von Werten für eine IN-Klausel
- eine Variable, die sowohl den Wert als auch die SQL-Syntax darstellt (IE:das von Ihnen bereitgestellte Beispiel)
EXEC sp_executesql
ermöglicht Ihnen die Verwendung von bind/preparedstatement-Parametern, sodass Sie sich nicht darum kümmern müssen, einfache Anführungszeichen/etc für SQL-Injection-Angriffe zu maskieren.