Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

गतिशील SQL और संग्रहीत कार्यविधि अनुकूलन

यदि आपके पास एकाधिक नेस्टेड आईएफ ब्लॉक हैं तो 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 सर्वर निष्पादन योजनाओं को संग्रहीत करने में सक्षम नहीं होगा



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर में डेटाटाइम के रूप में डिलीमीटर के बिना डेटाटाइम स्ट्रिंग को कैसे परिवर्तित करें?

  2. त्रुटियाँ:INSERT EXEC कथन नेस्ट नहीं किया जा सकता। और INSERT-EXEC कथन के भीतर ROLLBACK कथन का उपयोग नहीं कर सकता। इसे कैसे हल करें?

  3. AJAX के साथ डीबी क्वेरी (एसक्यूएल सर्वर 2005) चलाएं। क्या यह संभव है?

  4. डेटा में शामिल होने से SQL तालिका निर्माण

  5. टी-एसक्यूएल में डेटाबेस नाम के लिए एक चर का उपयोग कैसे करें?