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

SQL सर्वर में XML दस्तावेज़ में नोड क्रम ढूँढना

आप position() . का अनुकरण कर सकते हैं प्रत्येक नोड से पहले सिबलिंग नोड्स की संख्या की गणना करके कार्य करें:

SELECT
    code = value.value('@code', 'int'),
    parent_code = value.value('../@code', 'int'),
    ord = value.value('for $i in . return count(../*[. << $i]) + 1', 'int')
FROM @Xml.nodes('//value') AS T(value)

यहाँ परिणाम सेट है:

code   parent_code  ord
----   -----------  ---
1      NULL         1
11     1            1
111    11           1
12     1            2
121    12           1
1211   121          1
1212   121          2

यह कैसे काम करता है:

  • for $i in . क्लॉज $i . नाम के वेरिएबल को परिभाषित करता है जिसमें वर्तमान नोड शामिल है (. ) यह मूल रूप से XQuery के XSLT- जैसे current() की कमी के आसपास काम करने के लिए एक हैक है समारोह।
  • ../* अभिव्यक्ति वर्तमान नोड के सभी भाई-बहनों (माता-पिता के बच्चे) का चयन करती है।
  • [. << $i] predicate भाई-बहनों की सूची को फ़िल्टर करता है जो पहले आते हैं (<< ) वर्तमान नोड ($i )।
  • हम count() पूर्ववर्ती भाई-बहनों की संख्या और फिर स्थिति प्राप्त करने के लिए 1 जोड़ें। इस तरह पहले नोड (जिसमें कोई पूर्ववर्ती भाई-बहन नहीं है) को 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. SQL सर्वर में एक डेटाबेस की गतिविधि का विश्लेषण कैसे करें

  2. एक वर्चर डेटा प्रकार को डेटाटाइम डेटा प्रकार में बदलने के परिणामस्वरूप एक आउट-ऑफ-रेंज मान होता है

  3. SQL सर्वर:किसी दिनांक सीमा में सभी दिनों का चयन कैसे करें, भले ही कुछ दिनों के लिए कोई डेटा मौजूद न हो

  4. बड़ी तालिकाओं पर SQL सर्वर क्वेरी प्रदर्शन में सुधार करें

  5. एक पूर्ण कॉलम पर एक अद्वितीय अनुक्रमणिका कैसे बनाएं?