यदि आपके पास एकाधिक नेस्टेड आईएफ ब्लॉक हैं तो SQL सर्वर निष्पादन योजनाओं को संग्रहीत करने में सक्षम होगा। मुझे लगता है कि आईएफ सीधे हैं, उदाहरण के लिए। अगर @ पैरामीटर1 खाली नहीं है
SchmitzIT का उत्तर सही है कि SQL सर्वर डायनेमिक SQL के लिए निष्पादन पथ भी संग्रहीत कर सकता है। हालांकि यह केवल तभी सच है जब sql को ठीक से बनाया और निष्पादित किया गया हो।
ठीक से निर्मित करके, मेरा मतलब है कि मापदंडों को स्पष्ट रूप से घोषित करना और उन्हें sp_executesql पर पास करना। उदाहरण के लिए
declare @Param1 nvarchar(255) = 'foo'
,@Param2 nvarchar(255) = 'bar'
,@sqlcommand nvarchar(max)
,@paramList nvarchar(max)
set @paramList = '@Param1 nvarchar(255), @Param2 nvarchar(255)'
set @sqlcommand = N'Select Something from Table where Field1 = @Param1 AND Field2 = @Param2'
exec sp_executesql @statement = @sqlcommand
,@params = @paramList
,@Param1 = @Param1
,@Param2 = @Param2
जैसा कि आप देख सकते हैं कि sqlcommand टेक्स्ट उपयोग करने के लिए पैरामर मानों को हार्डकोड नहीं करता है। उन्हें निष्पादन sp_executesql
. में अलग से पास किया जाता हैयदि आप खराब पुराना गतिशील sqL लिखते हैं
set @sqlcommand = N'Select Something from Table where Field1 = ' + @Param1 + ' AND Field2 = ' + @Param2
exec sp_executesql @sqlcommand
तब SQL सर्वर निष्पादन योजनाओं को संग्रहीत करने में सक्षम नहीं होगा