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

SQL XML मान लाने के लिए XPath

अपडेट करें

मेरी सिफारिश एक्सएमएल में विशिष्ट नोड्स खोजने की प्रक्रियात्मक फैशन के बजाय, संबंधों में एक्सएमएल को तोड़ना और परिणामी संबंध में खोजों और जुड़ना होगा। यहां एक साधारण एक्सएमएल क्वेरी है जो नोड्स और रुचि के गुणों को काटती है:

select x.value(N'../../../../@stepId', N'int') as StepID
  , x.value(N'../../@id', N'int') as ComponentID
  , x.value(N'@nom',N'nvarchar(100)') as Nom
  , x.value(N'@valeur', N'nvarchar(100)') as Valeur
from @x.nodes(N'/xml/box/components/component/variables/variable') t(x)

हालांकि, अगर आपको एक XPath का उपयोग करना चाहिए जो वास्तव में ब्याज के मूल्य को पुनः प्राप्त करता है:

select x.value(N'@valeur', N'nvarchar(100)') as Valeur
from @x.nodes(N'/xml/box[@stepId=sql:variable("@stepID")]/
    components/component[@id = sql:variable("@componentID")]/
       variables/variable[@nom="Enabled"]') t(x)

यदि चरण आईडी और घटक आईडी कॉलम हैं, चर नहीं हैं, तो आपको एसक्यूएल के बजाय एसक्यूएल:कॉलम() का उपयोग करना चाहिए:XPath फ़िल्टर में चर। देखें XML डेटा के अंदर संबंधपरक डेटा को बांधना

और अंत में यदि आपको केवल अस्तित्व की जांच करने की आवश्यकता है तो आप exist( का उपयोग कर सकते हैं) ) एक्सएमएल विधि:

select @x.exist(
  N'/xml/box[@stepId=sql:variable("@stepID")]/
    components/component[@id = sql:variable("@componentID")]/
      variables/variable[@nom="Enabled" and @valeur="Yes"]') 


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एमएस एसक्यूएल सर्वर और जेडीबीसी:बंद कनेक्शन

  2. डेटाबेस 'xxx' खोला नहीं जा सकता क्योंकि यह संस्करण 904 है

  3. SQL2008 RDL फ़ाइल को SQL2005 में कनवर्ट करना

  4. SQL सर्वर प्रक्रिया कतार दौड़ की स्थिति

  5. SQL सर्वर:केवल MAX (DATE) वाली पंक्तियों का चयन करें