क्या HierarchyId के साथ एक पेड़ की शाखा को लोड करने / पढ़ने का एक निर्धारित तरीका है


11

मैं HierarchyId के साथ खेल रहा हूं, और मैंने निम्नलिखित करने के लिए एक सेट आधारित तरीका नहीं निकाला है:

  • एक बार में सभी सबट्री डालें
  • एक बार में सभी सबट्री पुनः प्राप्त करें

यह प्रश्न मेरे पिछले एक से संबंधित है , और मुझे संदेह है कि HierarchyId के साथ इन दो कार्यों को पूरा करने का एकमात्र तरीका एक समय में एक नोड या एक स्तर है। यदि मैं भौतिकवादी पथ का उपयोग कर रहा हूं, तो दोनों क्रियाएं आसानी से एक एकल (और तुच्छ) सेट आधारित कमांड द्वारा पूरी की जाती हैं।

मुझे किसकी याद आ रही है?

संपादित करें: मैंने एक सबट्री को स्थानांतरित करने का एक तरीका भी याद किया, लेकिन मैंने इसे मिकेल एरिकसन की टिप्पणी से सीखा



@MikaelEriksson क्या आप अपनी टिप्पणी का उत्तर दे सकते हैं?
एके

2
ज़रूर। मैंने थोड़ा विस्तार से बताया कि मैं कैसे समझ रहा हूं कि क्या चल रहा है। BTW, मैंने केवल HierarchyId पर थोड़ा परीक्षण किया है, कभी भी इसका उत्पादन में उपयोग नहीं किया है।
मिकेल एरिकसन

जवाबों:


5

उपयोग करने के लिए फ़ंक्शन GetReparentedValue है, लेकिन केवल GetReparentedValueपेड़ का उपयोग करते समय "असंगत" स्थिति में समाप्त हो सकता है।

यहाँ Microsoft द्वारा प्रदान किया गया कुछ कोड है जो उसकी देखभाल करता है। चल रहा है उपशीर्षक

मुझे लगता है कि इस से संबंधित एक पेड़ लगा रहा है । यह पैरेंट आईडी के लिए एक गणना किए गए कॉलम का उपयोग करता है जो पीके में एक स्व-शामिल होता है।


यह अब तक का सबसे अच्छा जवाब है। दुर्भाग्य से, मुझे एक कमांड में एक से अधिक स्तरों को सम्मिलित करने / चयन करने का कोई तरीका नहीं दिखता है।
एके

3

एक संपूर्ण सबट्री को पुनः प्राप्त करना सरल है - MSDN केIsDescendentOf अनुसार विधि का उपयोग करें

DECLARE @Manager hierarchyid
SELECT @Manager = OrgNode FROM HumanResources.EmployeeDemo
  WHERE LoginID = 'adventure-works\dylan0'

SELECT * FROM HumanResources.EmployeeDemo
WHERE OrgNode.IsDescendantOf(@Manager) = 1

सम्मिलित करना अधिक जटिल है, लेकिन आपका मुख्य मुद्दा आपकी बाधाओं के साथ होगा - आप स्पष्ट रूप से बच्चे की वस्तुओं को तब तक सम्मिलित नहीं कर सकते जब तक कि उनके माता-पिता प्रतिबद्ध न हों। इस मामले में या तो क्रमबद्ध और श्रेणीबद्ध क्रम में सम्मिलित करें, या बाधाओं को बंद करें और डालें।

बड़ी मात्रा में डेटा सम्मिलित करते समय - माइग्रेशन, बैच या बल्क इंसर्ट आदि - मैं बाधा को बंद कर दूंगा। जब मैं संचालन करना चाहता हूँ, तो मैं इसे पुनरावृत्त करूँगा, क्योंकि मुझे सिस्टम के चलने के दौरान ऐसे उदाहरण नहीं मिले हैं जहाँ बड़ी मात्रा में बड़ी मात्रा में पदानुक्रम में सम्मिलित होने की आवश्यकता होती है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.