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

अगर सीटीई के भीतर और?

कोशिश करें:

;with CTE_AorB
(
    select * from table_A WHERE (condition true)
    union all
    select * from table_B WHERE NOT (condition true)
),
CTE_C as
(
   select * from CTE_AorB // processing is removed
)

एक गतिशील खोज स्थिति के साथ कुंजी यह सुनिश्चित करना है कि एक अनुक्रमणिका का उपयोग किया जाता है, यहां इस विषय को संभालने के तरीके पर एक बहुत व्यापक लेख दिया गया है:

एरलैंड सोमरस्कोग द्वारा टी-एसक्यूएल में गतिशील खोज स्थितियां

इसमें कई वैकल्पिक खोज स्थितियों के साथ प्रश्न लिखने की कोशिश करने के सभी मुद्दों और विधियों को शामिल किया गया है। यह मुख्य बात जिस पर आपको ध्यान देने की आवश्यकता है वह कोड का दोहराव नहीं है, बल्कि एक इंडेक्स का उपयोग है। यदि आपकी क्वेरी किसी अनुक्रमणिका का उपयोग करने में विफल रहती है, तो यह खराब प्रदर्शन करेगी। ऐसी कई तकनीकें हैं जिनका उपयोग किया जा सकता है, जो किसी अनुक्रमणिका के उपयोग की अनुमति दे भी सकती हैं और नहीं भी।

यहाँ सामग्री की तालिका है:

  Introduction
      The Case Study: Searching Orders
      The Northgale Database
   Dynamic SQL
      Introduction
      Using sp_executesql
      Using the CLR
      Using EXEC()
      When Caching Is Not Really What You Want
   Static SQL
      Introduction
      x = @x OR @x IS NULL
      Using IF statements
      Umachandar's Bag of Tricks
      Using Temp Tables
      x = @x AND @x IS NOT NULL
      Handling Complex Conditions
   Hybrid Solutions – Using both Static and Dynamic SQL
      Using Views
      Using Inline Table Functions
   Conclusion
   Feedback and Acknowledgements
   Revision History

यदि आप SQL Server 2008 के उचित संस्करण पर हैं, तो एक अतिरिक्त तकनीक है जिसका उपयोग किया जा सकता है, देखें:SQL 2008 (SP1 CU5 और बाद के संस्करण) के लिए T-SQL संस्करण में गतिशील खोज स्थितियां

यदि आप SQL Server 2008 की उस उचित रिलीज़ पर हैं, तो आप बस OPTION (RECOMPILE) जोड़ सकते हैं क्वेरी के लिए और रन टाइम पर स्थानीय चर के मान का उपयोग अनुकूलन के लिए किया जाता है।

इस पर विचार करें, OPTION (RECOMPILE) इस कोड को लेगा (जहां OR . की इस गड़बड़ी के साथ किसी अनुक्रमणिका का उपयोग नहीं किया जा सकता है रों):

WHERE
    (@search1 IS NULL or [email protected])
    AND (@search2 IS NULL or [email protected])
    AND (@search3 IS NULL or [email protected])

और इसे रन टाइम पर ऑप्टिमाइज़ करें (बशर्ते कि केवल @Search2 को मान के साथ पास किया गया हो):

WHERE
    [email protected]

और एक इंडेक्स का उपयोग किया जा सकता है (यदि आपके पास कॉलम 2 पर परिभाषित है)



  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 2005 - पाठ के लिए संग्रहीत कार्यविधियाँ खोजें (सभी पाठ नहीं खोजे जा रहे हैं)

  2. SQL सर्वर 2016 अस्थायी तालिका क्वेरी योजना व्यवहार

  3. FIRST_VALUE और LAST_VALUE के साथ GROUP BY का उपयोग करना

  4. पदानुक्रमित तालिका में बच्चे के मूल माता-पिता प्राप्त करें

  5. SQL सर्वर क्वेरी डेटा प्रकार, नल नहीं, और प्राथमिक कुंजी बाधाओं के साथ तालिका में कॉलम की सूची प्राप्त करने के लिए