यह संभव है, लेकिन इसके लिए डायनेमिक 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 सिंटैक्स दोनों का प्रतिनिधित्व करने के लिए एक वैरिएबल (IE:आपके द्वारा प्रदान किया गया उदाहरण)
EXEC sp_executesql
आपको बाइंड/तैयार स्टेटमेंट पैरामीटर का उपयोग करने की अनुमति देता है ताकि आपको SQL इंजेक्शन हमलों के लिए सिंगल कोट्स/आदि से बचने की चिंता न हो।