Het is mogelijk, maar het vereist het gebruik van dynamische SQL.
Ik raad aan om De vloek en zegeningen van dynamische SQL
alvorens verder te gaan...
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)
Dynamische SQL is slechts een SQL-instructie, samengesteld als een tekenreeks voordat deze wordt uitgevoerd. Dus de gebruikelijke string-aaneenschakeling vindt plaats. Dynamische SQL is vereist wanneer u iets wilt doen in de SQL-syntaxis dat niet is toegestaan, zoals:
- een enkele parameter om een door komma's gescheiden lijst met waarden voor een IN-clausule weer te geven
- een variabele die zowel de waarde als de SQL-syntaxis vertegenwoordigt (IE:het voorbeeld dat je hebt gegeven)
EXEC sp_executesql
stelt u in staat om bind/preparedstatement-parameters te gebruiken, zodat u zich geen zorgen hoeft te maken over het ontsnappen van enkele aanhalingstekens/enz. voor SQL-injectieaanvallen.