यदि आपको SQL सर्वर त्रुटि Msg 529 मिल रही है जिसमें कुछ ऐसा लिखा है डेटा प्रकार int से xml में स्पष्ट रूपांतरण की अनुमति नहीं है , ऐसा शायद इसलिए है क्योंकि आप एक डेटा प्रकार रूपांतरण करने का प्रयास कर रहे हैं जिसकी अनुमति नहीं है।
SQL सर्वर कुछ रूपांतरणों की अनुमति नहीं देता है। यदि आप ऐसा रूपांतरण करने का प्रयास करते हैं, तो आपको यह त्रुटि मिलेगी।
त्रुटि का उदाहरण
यहां कोड का एक उदाहरण दिया गया है जो त्रुटि उत्पन्न करता है:
SELECT CAST(10 AS xml);
परिणाम:
Msg 529, Level 16, State 2, Line 1 Explicit conversion from data type int to xml is not allowed.
यहां, हमने 10 नंबर को xml
. में बदलने की कोशिश की टाइप करें।
SQL सर्वर इस तरह के रूपांतरण की अनुमति नहीं देता है और इसलिए यह एक त्रुटि देता है।
यदि हम उस मान को date
. में बदलने का प्रयास करते हैं तो हमें वही त्रुटि मिलती है टाइप करें:
SELECT CAST(10 AS date);
परिणाम:
Msg 529, Level 16, State 2, Line 1 Explicit conversion from data type int to date is not allowed.
आप मान सकते हैं कि हम TRY_CAST()
. का उपयोग करके त्रुटि से छुटकारा पा सकते हैं इसके बजाय कार्य करें। लेकिन यह धारणा गलत होगी:
SELECT TRY_CAST(10 AS xml);
परिणाम:
Msg 529, Level 16, State 2, Line 1 Explicit conversion from data type int to xml is not allowed.
हालांकि TRY_CAST()
फ़ंक्शन का उपयोग सामान्य रूप से NULL
return वापस करने के लिए किया जा सकता है एक त्रुटि के बजाय, जो इस विशेष त्रुटि के लिए लागू नहीं होती है।
जब रूपांतरण की अनुमति नहीं होने के कारण कोई रूपांतरण विफल हो जाता है, तब भी TRY_CAST()
(और TRY_CONVERT()
) एक त्रुटि लौटाएगा।
समाधान
इसे ठीक करने के लिए, आपको या तो मूल प्रकार या गंतव्य प्रकार (या दोनों) बदलना होगा।
यदि आप एक कॉलम पास कर रहे हैं, तो जांचें कि आपको सही कॉलम मिला है। वही अगर आप एक वेरिएबल पास कर रहे हैं - जांचें कि यह सही वेरिएबल है।
उदाहरण के लिए, निम्न रूपांतरण सफल होता है:
SELECT CAST('{a:10}' AS xml);
परिणाम:
{a:10}
और निम्नलिखित भी सफल होते हैं:
SELECT CAST(10 AS char(2));
परिणाम:
10
वास्तविक मान के आधार पर, आप मूल मान को स्वीकृत प्रकार में बदलने का प्रयास कर सकते हैं।
उदाहरण के लिए, हम अपने मूल XML त्रुटि उत्पादन कोड को निम्नलिखित गैर-त्रुटि उत्पादन कोड में बदल सकते हैं:
SELECT CAST(CAST(10 AS varchar) AS xml);
परिणाम:
10
इस मामले में, ऑपरेशन ने पुष्टि नहीं की कि परिणाम एक वैध XML दस्तावेज़ है। यह बस मूल मान को xml
. में बदल देता है टाइप करें।
हालाँकि, यह हमेशा काम नहीं कर सकता है, यह उस मूल्य पर निर्भर करता है जिसे आप कनवर्ट करने का प्रयास कर रहे हैं। उदाहरण के लिए, हमारा दिनांक उदाहरण अभी भी एक त्रुटि उत्पन्न करता है (यद्यपि, एक भिन्न त्रुटि):
SELECT CAST(CAST(10 AS varchar) AS date);
परिणाम:
Msg 241, Level 16, State 1, Line 1 Conversion failed when converting date and/or time from character string.
इस मामले में, हमें त्रुटि संदेश 241 मिलता है, जो एक अलग त्रुटि है। इस मामले में, त्रुटि रूपांतरण के अस्वीकृत होने के कारण नहीं है। यह वास्तविक मूल्य के कारण समस्याएं पैदा कर रहा है। हमारे मामले में, SQL सर्वर संख्या 10 को एक मान्य तिथि में परिवर्तित नहीं कर सकता है। हमें इनपुट मान को एक अधिक सार्थक मान में बदलना होगा जो एक मान्य तिथि का प्रतिनिधित्व करता है।