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

एसक्यूएल क्वेरी एक्सएमएल मान वापस लौट रहा है

आपके एक्सएमएल में एक नाम स्थान शामिल है xmlns="http://www.webserviceX.NET/" , जो कि डिफ़ॉल्ट नाम स्थान . है . आपको या तो इसे घोषित करना होगा या उपसर्ग के लिए वाइल्डकार्ड का उपयोग करना होगा।

XML के साथ कुछ सर्वोत्तम प्रथाएं हैं:

  • जितना संभव हो उतना विशिष्ट रहें
  • केवल अग्रेषित नेविगेशन
  • महत्वपूर्ण यदि XML का निर्माण आपके नियंत्रण में है, तो दिनांक और समय प्रारूप को ISO8601 में बदलें। आपके प्रारूप संस्कृति विशिष्ट हैं और आसानी से विभिन्न प्रणालियों पर रूपांतरण त्रुटियों का कारण बन सकते हैं। सबसे अच्छा एक संयुक्त मूल्य था जैसे <DateAndTime>2017-05-23T12:37:00</DateAndTime>

आपकी समस्या के लिए कई तरीके हैं:

DECLARE @xml XML=
N'<string xmlns="http://www.webserviceX.NET/">
  <StockQuotes>
    <Stock>
      <Symbol>ENGI.PA</Symbol>
      <Last>13.53</Last>
      <Date>5/23/2017</Date>
      <Time>12:37pm</Time>
      <!--more elements -->
    </Stock>
  </StockQuotes>
</string>';

--सर्वश्रेष्ठ तरीका:XMLNAMESPACES डिफ़ॉल्ट नामस्थान . घोषित करने के लिए

WITH XMLNAMESPACES(DEFAULT 'http://www.webserviceX.NET/')
SELECT @xml.value(N'(/string/StockQuotes/Stock/Symbol/text())[1]',N'nvarchar(max)');

- लागू नाम स्थान घोषणा:

SELECT @xml.value(N'declare namespace ns="http://www.webserviceX.NET/";
                   (/ns:string/ns:StockQuotes/ns:Stock/ns:Symbol/text())[1]',N'nvarchar(max)');

--ज्यादातर मामलों में अनुशंसित नहीं, लेकिन आलसी लोगों . के लिए अच्छा है :-डी

SELECT @xml.value(N'(//*:Symbol)[1]',N'nvarchar(max)');

--यदि आप समान स्तर के अधिक मान पढ़ना चाहते हैं, तो आप .nodes . का उपयोग कर सकते हैं वर्तमान नोड को ...<Stock> . पर सेट करने के लिए ।

WITH XMLNAMESPACES(DEFAULT 'http://www.webserviceX.NET/')
SELECT st.value('(Symbol/text())[1]',N'nvarchar(max)')
      ,st.value('(Last/text())[1]',N'decimal(10,4)')
      --more nodes 
FROM @xml.nodes(N'/string/StockQuotes/Stock') AS A(st);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. FILESTREAM फ़ाइलें पंक्ति हटाए जाने के बाद पीछे रह जाती हैं

  2. T-SQL (sp_tables) का उपयोग करके SQL सर्वर में तालिकाओं और दृश्यों की सूची लौटाएं

  3. अल्पविराम सीमांकित स्ट्रिंग से बल्क इंसर्ट

  4. उदाहरण के लिए सभी अस्थायी तालिकाओं को छोड़ें

  5. यह पता लगाने के 3 तरीके कि क्या कोई कॉलम SQL सर्वर में एक कंप्यूटेड कॉलम है