नीचेहम रिकर्सिव सीटीई में बाहरी जुड़ने का उपयोग क्यों नहीं कर सकते?
;WITH GetParentOfChild AS
(
SELECT
Rn = ROW_NUMBER() Over(Order By (Select 1))
,row_id AS Parents
,parent_account_id As ParentId
FROM siebelextract..account
WHERE row_id = @ChildId
UNION ALL
SELECT
Rn + 1
,a.row_id as Parents
,a.parent_account_id As ParentId
FROM siebelextract..account a
JOIN GetParentOfChild gp on a.row_id = gp.ParentId
)
SELECT TOP 1 @ChildId = Parents
FROM GetParentOfChild
ORDER BY Rn DESC
है क्या यह है कि किसी भी बच्चे को दिया, यह रूट स्तर माता पिता वापस आ जाएगी .... कार्यक्रम बिल्कुल ठीक काम कर रहा है सब समय है
बस बाहर करने पर विचार करें ... जिज्ञासा/प्रयोगात्मक खातिर की मैं वाम बाहरी करने के लिए शामिल हों शामिल हों बदल गया और यह
संदेश 462, स्तर 16, राज्य 1, प्रक्रिया GetParent, लाइन 9 बाहरी शामिल होने के लिए एक पुनरावर्ती आम तालिका के पुनरावर्ती भाग में अनुमति नहीं है सूचना अभिव्यक्ति 'GetParentOfChild'।
मेरा सवाल यह है कि क्यों सीटीई का रिकर्सिव हिस्सा बाएं बाहरी में शामिल नहीं हो सकता है? क्या यह डिजाइन द्वारा है?
धन्यवाद
मुझे नहीं लगता कि यह उत्तर या लिंक वास्तव में "क्यों" जवाब देता है। उदाहरण के लिए अगली पुनरावृत्ति की दिशा को नियंत्रित करने के लिए मैं दो बाएं जुड़ने (बाहरी तालिकाओं में) को जोड़ना चाहता था। अनंत रिकर्सन लूप के दौरान सभी को छोड़ने के लिए एक अच्छे कारण की तरह प्रतीत नहीं होता है। – crokusek
@ क्रोकुसेक, पिछले सीटीई एक्सप्रेशन में अपनी सहकर्मी क्वेरी तैयार करें और आंतरिक इसे अपने रिकर्सिव सीटी क्वेरी में शामिल करें। – danihp
हा, मैंने कोशिश की और यह चल रहा है, साफ चाल। अगर मैंने इसे सही किया, तो मुझे बाएं जॉइन को सीटीई में पूर्ण बाहरी में परिवर्तित करना पड़ा। यह भाग गया लेकिन क्वेरी प्लान दुखी हो जाती है - यह आरटीई (आकारों के आधार पर खत्म नहीं होती) से शुरू होने से पहले पूरी तरह से पूरी तरह से गणना करती है, जो कि केवल वही चीज़ की जांच करने की अच्छीता खो देती है। सीटी परिणाम छोटा होने पर छोड़कर एक कर्सर प्रदर्शन करेगा। कुछ मामलों के लिए शायद एक अच्छा कामकाज। – crokusek