2012-04-08 5 views
38

निम्न SQL इटज़िक बेन-गण से है जिसका उपयोग संख्या तालिका उत्पन्न करने के लिए किया जाता है। order by (select null) भाग का क्या अर्थ है? धन्यवाद।"ऑर्डर द्वारा (चुनें नल)" का अर्थ क्या है?

DECLARE @number_of_numbers INT; 
SELECT @number_of_numbers = 100000; 

WITH a AS (SELECT 1 AS i 
       UNION ALL 
       SELECT 1 
      ), 
     b AS (SELECT 1 AS i 
       FROM  a AS x , 
         a AS y 
      ), 
     c AS (SELECT 1 AS i 
       FROM  b AS x , 
         b AS y 
      ), 
     d AS (SELECT 1 AS i 
       FROM  c AS x , 
         c AS y 
      ), 
     e AS (SELECT 1 AS i 
       FROM  d AS x , 
         d AS y 
      ), 
     f AS (SELECT 1 AS i 
       FROM  e AS x , 
         e AS y 
      ), 
     numbers 
      AS (SELECT TOP (@number_of_numbers) 
         ROW_NUMBER() OVER (ORDER BY (SELECT NULL 
                )) AS number 
       FROM  f 
      ) 
    SELECT * 
    FROM numbers; 

धन्यवाद!

उत्तर

62

ROW_NUMBER को ORDER BY खंड वाक्य रचनात्मक रूप से आवश्यक है। आप इसे बिना किसी के इस्तेमाल कर सकते हैं। SELECT NULL कोई विशेष आदेश लागू नहीं करते समय त्रुटि को बंद करने के लिए एक हैक है। इस मामले में हमें किसी भी आदेश को लागू करने की आवश्यकता नहीं है, इसलिए सबसे तेज़ विकल्प SELECT NULL का उपयोग करना है।

अनुकूलक इस चाल के माध्यम से देखता है, इसलिए इसमें कोई रनटाइम लागत नहीं है (यह दावा निष्पादन योजना को देखकर आसानी से सत्यापित किया जाता है)।

+12

इसका उपयोग इरादे के बयान के रूप में भी किया जा सकता है जब वास्तव में इसकी आवश्यकता नहीं होती है। उदाहरण के लिए, माइक्रोसॉफ्ट की ट्रेनिंग किट बुक "माइक्रोसॉफ्ट एसक्यूएल सर्वर 2012 क्वेरी" में, वे इसे एक वैध क्वेरी में जोड़ने की सलाह देते हैं, "... यदि आप वास्तव में तीन मनमानी पंक्तियों के बाद हैं, तो ऑर्डर जोड़ने का अच्छा विचार हो सकता है धारा अभिव्यक्ति के साथ (चयन न्यूल) लोगों को यह बताने के लिए कि आपकी पसंद जानबूझकर है और एक निरीक्षण नहीं है। " –