可能ですが、動的 SQL を使用する必要があります。
動的 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
bind/preparedstatement パラメータを使用できるため、SQL インジェクション攻撃のために一重引用符などをエスケープする必要がありません。