Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

नोड्स () विधि का उपयोग करके SQL में पदानुक्रमित XML को समतल करना

ऐसा लगता है कि ऑनलाइन देखने के बाद मैंने अपने प्रश्न का उत्तर दे दिया है:

SELECT
    grandparent.gname.value('@name', 'VARCHAR(15)'),
    parent.pname.value('@name', 'VARCHAR(15)'),
    child.cname.value('@name', 'VARCHAR(15)')
FROM
    @xmlFamilyTree.nodes('/grandparent') AS grandparent(gname)
CROSS APPLY
    grandparent.gname.nodes('*') AS parent(pname)
CROSS APPLY
    parent.pname.nodes('children/*') AS child(cname)

CROSS APPLY का उपयोग करना मैं शीर्ष-स्तरीय grandparent का चयन कर सकता हूं नोड और बच्चे का चयन करने के लिए इसका उपयोग करें parent नोड्स और इतने पर। इस पद्धति का उपयोग करके मैंने अपनी क्वेरी को लगभग 1 मिनट 30 सेकंड . में निष्पादित करने से लिया है लगभग 6 सेकंड . तक नीचे ।

दिलचस्प बात यह है कि अगर मैं "पुराना" OPEN XML का उपयोग करता हूं उसी डेटा को पुनः प्राप्त करने की विधि, क्वेरी 1 सेकंड में निष्पादित होती है !

ऐसा लगता है कि आपको पारित होने वाले दस्तावेज़ के अपेक्षित आकार/जटिलता के आधार पर केस-दर-मामला आधार पर इन दो तकनीकों के उपयोग के लिए संपर्क करना पड़ सकता है।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. बाधाओं को अस्थायी रूप से बंद करें (MS SQL)

  2. SQL सर्वर में दो तिथियों के बीच सभी सप्ताहों की शुरुआत और समाप्ति तिथियां कैसे प्राप्त करें?

  3. SQL सर्वर पूर्ण-पाठ खोज (FTS) को बेहतर बनाने के लिए स्टॉपवर्ड और स्टॉपलिस्ट का उपयोग कैसे करें

  4. SQL सर्वर में विभिन्न स्ट्रिंग प्रकारों के बीच अंतर?

  5. बफर कैश:यह क्या है और यह डेटाबेस के प्रदर्शन को कैसे प्रभावित करता है?