2010-06-25 11 views
5

निम्न क्वेरी कोई परिणाम और एसक्यूएल सर्वर 2008 (SP1 पर परीक्षण) पर कोई त्रुटि है, तो आप भी मास्टर किसी भी डेटाबेस के खिलाफ चला सकते हैं रिटर्न:SQL सर्वर चयन क्वेरी में ब्रांड्स की भूमिका?

WITH computed_table (id) AS 
(
    SELECT id FROM this_table_does_not_exist 
) 
(SELECT * FROM computed_table) 
UNION 
(SELECT * FROM another_table_that_does_not_exists) 

SQL सर्वर 2005 पर, आप कोई त्रुटि मिलती है क्योंकि टेबल मौजूद नहीं है।

WITH computed_table (id) AS 
(
    SELECT id FROM this_table_does_not_exist 
) 
SELECT * FROM computed_table 
UNION 
(SELECT * FROM another_table_that_does_not_exists) 

समस्याओं का एक ही तरह असली तालिकाओं के साथ प्रकट होता है:: आप मिल भी अगर आप कुछ कोष्ठकों को दूर कोई त्रुटि मिलती है कुछ अवसरों पर, क्वेरी किसी भी परिणाम वापस नहीं करता है, और यदि आप कुछ कुछ मामूली परिवर्तन कर , एक जगह या कैरिज रिटर्न को हटाने की तरह, यह फिर से काम करता है ...

मुझे लगता है कि क्वेरी में कोई समस्या हो सकती है, क्योंकि कोष्ठक में संलग्न चयन को सबक्वायरी के बजाय अभिव्यक्ति के रूप में व्याख्या किया जा सकता है this page में। लेकिन कम से कम एक त्रुटि वापस करना चाहिए।

क्या मुझे कुछ याद आ रही है?

संपादित करें 26/06/2010: मैंने निम्नलिखित परिणामों के साथ कुछ प्रोफाइलिंग सत्र चलाए।

ऊपर प्रश्न के लिए घटनाओं के अनुक्रम है:

  • अपवाद (त्रुटि: 208, अमान्य ऑब्जेक्ट नाम)
  • एसक्यूएल: BatchStarting
  • एसक्यूएल: StmtStarting
  • एसक्यूएल: BatchCompleted

बिना किसी अनुबंध के क्वेरी के लिए:

  • अपवाद (त्रुटि: 208)
  • एसक्यूएल: BatchStarting
  • एसक्यूएल: StmtStarting
  • अपवाद (त्रुटि: 208)
  • उपयोगकर्ता त्रुटि संदेश (अमान्य ऑब्जेक्ट नाम 'this_table_does_not _exist')
  • एसक्यूएल : BatchCompleted

एक काम क्वेरी के लिए:

  • एसक्यूएल: BatchStarting
  • एसक्यूएल: StmtStarting
  • Showplan सभी
  • एसक्यूएल: StmtCompleted
  • एसक्यूएल: BatchCompleted

मैं भी भाग गया है कि मुझे एक ही पैदा असली तालिकाओं के साथ प्रश्नों में से एक मुद्दा।घटनाओं के अनुक्रम है:

  • एसक्यूएल: BatchStarting
  • एसक्यूएल: StmtStarting
  • एसक्यूएल:

BatchCompleted कोई जल्दी "अपवाद" => टेबल मौजूद हैं। नहीं "एसक्यूएल: StmtCompleted" => इसका मतलब है कि एक त्रुटि हुई, मैं किसी अन्य कारण को नहीं देख सका कि यह घटना क्यों नहीं उठाई जाएगी। नहीं "सभी दिखाएं" => इसका मतलब है कि त्रुटि (या कब) निष्पादन योजना की गणना की जाती है। यह सीटीई और कोष्ठक के संयोजन के कारण हो सकता है।

मैं अगले हफ्ते माइक्रोसॉफ्ट समर्थन के साथ इस मुद्दे को उठाऊंगा।

+0

क्या आपने चयनित कॉलम को वास्तविक कॉलम नाम बदलने की कोशिश की है? – DForck42

+1

क्या एक अद्भुत सवाल है! सबसे पहले, 2008 में, आपको दूसरे कथन पर भी त्रुटियां मिलती हैं। साथ ही, मुझे नहीं लगता कि यूनियन स्टेटमेंट के पास अजीब व्यवहार के साथ कुछ भी करने के लिए यूनियन को हटाने और दूसरा चयन परिणाम बदलने में प्रतीत नहीं होता है। एक दिलचस्प बात - पहली कथन का उपयोग करते समय, और अनुमानित निष्पादन योजना के लिए पूछते हुए, मुझे कोई योजना वापस नहीं मिलती है। मैं अब एक निशान चलाने वाला हूँ। बाद में बात करता हूं। – MaasSql

+0

क्या आप इस कोड को भी पोस्ट करेंगे: "मैंने वास्तविक तालिकाओं के साथ एक प्रश्न भी चलाया जो मुझे एक ही मुद्दा बना रहा है।" इसके अलावा, शुद्ध जिज्ञासा से, क्या आप इसे अवरोधक के रूप में विकास/उत्पादन के मुद्दे के रूप में पेश कर रहे हैं? यदि ऐसा है, ऐसा लगता है कि वर्कअराउंड सीटीई, फिर कंस्ट्रैसिस पैटर्न का पालन नहीं करना होगा। – MaasSql

उत्तर

3

इसलिए, मैंने मूल प्रश्न पर मेरी पिछली टिप्पणी के अनुसार, बस थोड़ा सा सरलीकृत किया।

WITH computed_tabled AS 
(
    SELECT id FROM this_table_does_not_existd 
) 
(SELECT id FROM computed_tabled) 

ऐसा लगता है कि यह हमें वही व्यवहार देता है। तब मैं एक निशान चला गया। घटना कक्षाएं:

  • एसक्यूएल: बैच
  • एसक्यूएल शुरू: बैच पूरे
  • एसक्यूएल: StmtStarting
  • एसक्यूएल:
  • Showplan StmtCompleted सभी
  • Showplan एक्सएमएल

क्या मैं पकड़ा अप्रत्याशित था:

  • एसक्यूएल: BatchStarting
  • एसक्यूएल: StmtStarting
  • एसक्यूएल: BatchCompleted

नोट: कोई एसक्यूएल: StmtCompleted, कोई योजना नहीं। तो, अगली बार, मैं कैप्चर सेटिंग्स पर वापस जाता हूं, और त्रुटियों और चेतावनियों के तहत प्रत्येक एकल इवेंट क्लास में जोड़ता हूं। क्वेरी दोबारा शुरू करें, और आप क्या जानते हैं? पहला पकड़ा गया कार्यक्रम है:

Error: 208, Severity: 16, State: 1 

अनुमान लगाएं 208 क्या है? लेकिन, ग्राहक कभी त्रुटि नहीं देखता है।

क्या मैं सोचता हूं ऐसा हो रहा है कि डीबीएमएस में कोड कह रहा है - अरे, उन्होंने हमें कुछ भी वापस करने या कुछ करने के लिए नहीं कहा, तो परेशान क्यों? आइए किसी और मांग के लिए कुछ संसाधन मुक्त करें।

तो मैं कोड के इस टुकड़े की कोशिश की:

--asdfasdf 
(SELECT 1) 

कौन सा पूरी तरह से मेरी सिद्धांत दूर उड़ा दिया। कोष्ठक को अभिव्यक्ति के रूप में व्याख्या नहीं किया जा रहा था। इसके बजाए, उन्हें पूरी तरह से पूछताछ के रूप में व्याख्या किया जा रहा था (जो कहने के लिए है, क्लाइंट कुछ लौटने के लिए कह रहा है) और 1 कॉलम और 1 पंक्ति के साथ एक रिकॉर्डसेट लौटा दिया। लेकिन कोई योजना नहीं - शायद बी/सी की कोई योजना की आवश्यकता नहीं थी, क्योंकि कोई डीबी वस्तुएं शामिल नहीं थीं।

तो, मेरे मन के साथ गड़बड़ करने के लिए कुछ और मैं इस कोशिश की:

declare @id as integer; 
; 
WITH computed_table AS 
(
    SELECT id FROM this_table_does_not_exist 
) 
select @id = (SELECT id FROM computed_table) 

कौन सा, बहुत कोष्ठक को हटाने की तरह है, का उत्पादन एक उपयोगकर्ता त्रुटि संदेश।

मैं कहता हूं, आप कुछ भी याद नहीं कर रहे हैं। मुझे लगता है कि यह एक एमएस एसक्यूएल सर्वर बग है। यह निश्चित रूप से सीटीई और कोष्ठक से संबंधित लगता है। मैंने इसका जिक्र करने की कोशिश की, लेकिन कुछ भी नहीं मिला। यह मुझे अगली स्थानीय पास बैठक में बात करने के लिए कुछ देगा। खेद है कि मुझे स्थिति में जोड़ना है भ्रम है। अगर मैं कुछ सीखता हूं, तो मैं निश्चित रहूंगा और इसे यहां पोस्ट करूंगा!


अद्यतन: 2010-06-26 10:09 सीएसटी मैं इस एक मुद्दे के रूप में सूचीबद्ध करने की कोशिश में माइक्रोसॉफ्ट कनेक्ट करने के लिए चला गया। मैं सीटी 208 या cte invalid object के आसपास कुछ खोजने में असमर्थ था। ईमानदारी से, मैं एसक्यूएल सर्वर के लिए एक और बग लिस्टिंग साइट के बारे में नहीं जानता जो कोई भी जांच सकता है। मैंने माइक्रोसॉफ्ट सपोर्ट और फिर, Google को खोजने का भी प्रयास किया।

संबंधित मुद्दे