sql server - Iterate sql data with cursors -
तो, मेरे पास "बॉम" नामक एक एसक्यूएल टेबल है।
- पेरेंटपेर्टआईडी
- ChildPartId
कल्पना कीजिए कि मेरे पास टेबल से भरा डेटा है (जैसे उप-स्तर की अज्ञात मात्रा):
| पेरेंटपेर्टआईडी | CHILDPARTID | + --------------- + -------------- + | एनके-एफएस-डीआर -62 डीआर | 2001020060 | | 2001020060 | 2002014018 | | 2002014018 | 120011 | | एनके-पीएच-डीआर -3 एमएच | 2001916023 | असल में मैं "एनके-एफएस-डीआर -62DR" का चयन करना चाहता हूं जो कि उसके नीचे सभी बाल भागों का चयन करेगी, ऐसा लग रहा होगा
| पेरेंटपेर्टआईडी | CHILDPARTID | + --------------- + -------------- + | एनके-एफएस-डीआर -62 डीआर | 2001020060 | | 2001020060 | 2002014018 | | 2002014018 | 120011 |
बोम अज्ञात स्तरों की गहराई से गहरा जा सकता है।
अतः, मैं कर्सर के कुछ रूप को शाब्दिक सभी सबलेवल ।
मेरे पास वर्तमान में एक कर्सर है लेकिन मैं डेटा को पुनरावृत्त करने का एक तरीका नहीं सोच सकता।
यहां मेरा वर्तमान कोड है (केवल स्तर 1 गहरा जाता है):
बनाओ टेबल #tmpBillOfMaterial (ParentPartId VARCHAR (18), ChildPartId VARCHAR (18)) DECLARE @ParentPartId VARCHAR (18) #tmpBillOfMaterial (ParentPartId, ChildPartId) में शामिल करें SELECT b.ParentPartId, b.ChildPartId JBds से .BoM b WHERE b.ParentPartId = 'NK-FS-DR-62DR' DECLARE कर्सरStage1 चयन के लिए कर्सर B.ChildPartId से jbds.BoM b WHERE b.ParentPartId = 'एनके- एफएस- DR-62DR' ओपन कर्सर चरण 1 FETCH कर्सर से आगे चरण 1 INTO @ParentPartId WHELE @@ FETCH_STATUS = 0 बस INSTECT #tmpBillOfMaterial (ParentPartId, ChildPartId) का चयन करें b.ParentPartId, b.ChildPartId से jbds.BoM b WHERE b.ParentPartId = @ParentPartId FETCH आगे से cursorStage1 में @ParentPartId EndCLOSE कर्सर स्टाग e1 डेललोकेट कर्सर स्टैज 1 का चयन करें * # सेएमपीबीओफ़ोमेटरी ड्रॉप तालिका #tmpBillOfMaterial
मैंने कर्सर के अंदर कर्सर को जोड़ने की कोशिश की है, लेकिन यह केवल सभी स्तरों पर चलने के बजाय 2 स्तरों को प्राप्त कर सकता है।
सबसे आसान एक रिकर्सिव सीटीई का उपयोग करना है:
; x के साथ के रूप में माता-पिता, बॉम से शिशुपाट, जहां माता -पिताजी = 'एनके-एफएस-डीआर -62 डीआर' संघ सभी बॉम। पेरेंटपेप्रिटिड, बोम। पेरेंटपेप्टाइड = एक्स। चाइल्डपार्टिड पर बॉम इनर एक्स एक्स से बॉम। चाइल्डपार्टिड) * एक्स से चयन करें < / प्री>
Comments
Post a Comment