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

गैर-एक्सएमएल डेटा के लिए लिंक किए गए सर्वर से पूछताछ करते समय मुझे त्रुटि क्यों मिलती है एक्सएमएल डेटा प्रकार वितरित प्रश्नों में समर्थित नहीं है?

यह SQL सर्वर के भीतर एक कमी है। केवल अस्तित्व तालिका पर एक एक्सएमएल कॉलम का यह वितरित प्रश्नों में भाग लेने से रोकता है (उदाहरण के लिए एक लिंक किए गए सर्वर कनेक्शन के माध्यम से पूछताछ की जा रही है)। इस 'सेवानिवृत्त' दस्तावेज़ में इसका उल्लेख है। वर्तमान संस्करण के दस्तावेज़ीकरण में इसका कोई उल्लेख नहीं है।

Microsoft Connect पर प्रासंगिक बग रिपोर्ट हुआ करती थी, लेकिन अब वह Azure फीडबैक फ़ोरम के पक्ष में 'सेवानिवृत्त' हो गई है। यह फ़ीडबैक आइटम "कृपया उत्पाद दस्तावेज़ीकरण से सीधे प्रतिक्रिया सबमिट करें" के निर्देश के साथ बंद है, जो ठीक होगा यदि उत्पाद दस्तावेज़ में वास्तव में इसका उल्लेख किया गया है। इस अन्य फ़ीडबैक आइटम में कनेक्ट से माइग्रेट की गई टिप्पणी शामिल है, और इसकी स्थिति 'अनियोजित' है।

कनेक्ट बग रिपोर्ट में से एक, जो पहले मौजूद थी, ने दो समाधान दिए:

  1. रिमोट सर्वर पर एक्सएमएल कॉलम के बिना [ए] व्यू बनाएं और उससे पूछें।

    आपके उदाहरण में, इसमें MyDatabase . में एक दृश्य जोड़ना शामिल होगा जो इस तरह दिखता है:

    CREATE VIEW V_T_B AS SELECT Id FROM T_B;
    

    फिर आप Id . प्राप्त करने के लिए लिंक के माध्यम से इस दृश्य को क्वेरी कर सकते हैं जानकारी। ध्यान दें कि कुछ ऐसा है

    SELECT Id FROM ( SELECT Id FROM T_B ) T_B;
    

    नहीं काम।

  2. फ़ॉर्म में पास-थ्रू क्वेरी का उपयोग करें

    SELECT * from OPENQUERY (... )
    

    इस पद्धति का लाभ यह है कि स्रोत डेटाबेस में किसी भी परिवर्तन की आवश्यकता नहीं है; नकारात्मक पक्ष यह है कि स्थानीय और लिंक किए गए डेटा दोनों के लिए मानक चार-भाग नामकरण का उपयोग करना अब संभव नहीं है। क्वेरी इस तरह दिखेगी

     SELECT Id FROM OPENQUERY(DATA02, 'SELECT Id FROM T_B') T_B;
    

    ध्यान दें कि यदि आप वास्तव में करते हैं एक्सएमएल डेटा चाहते हैं, यह विधि (गैर-एक्सएमएल डेटाटाइप को और उससे कास्टिंग के साथ) आवश्यक होगी :

     SELECT Id, CAST(Stuff AS XML) Stuff 
     FROM OPENQUERY(DATA02, 'SELECT Id, CAST(Stuff AS nvarchar(max)) Stuff 
                             FROM T_B') T_B;
    

ध्यान दें कि बग को पहली बार SQL सर्वर 2005 में रिपोर्ट किया गया था, और SQL सर्वर 2017 में ठीक नहीं किया गया है। मैं अभी तक SQL सर्वर 2019 की जांच करने में सक्षम नहीं हूं।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. T-SQL का उपयोग करके SQL सर्वर में लिंक किए गए सर्वरों की सूची वापस करने के 2 तरीके

  2. SQL सर्वर बैकअप जाँच

  3. अधिक उन्नत क्वेरी चलाते समय ऑब्जेक्ट बंद होने पर ऑपरेशन की अनुमति नहीं है

  4. कुल योग चलाने के लिए सर्वोत्तम दृष्टिकोण - SQL सर्वर 2012 के लिए अद्यतन

  5. SQL सर्वर डेटाबेस में सभी ट्रिगर को अक्षम कैसे करें