2012-07-17 12 views
5

मेरे पास XML का SQL सर्वर कॉलम है जिसमें 8000 से अधिक वर्ण वाले कुछ रिकॉर्ड हैं।मैं एक एक्सएमएल फ़ील्ड को स्ट्रिंग में 8000 से अधिक वर्णों के साथ कैसे परिवर्तित करूं?

मैं इस कॉलम को varchar में परिवर्तित करना चाहता हूं।

मुझे छंटनी के बारे में कोई चिंता नहीं है (पहला 8000 वर्ण ठीक है)।

बहरहाल, जब भी मैं CONVERT(varchar(8000), Content) कोशिश मैं एक त्रुटि मिलती है:

Target string size is too small to represent the XML instance

जब मैं CONVERT(varchar(MAX), Content) कोशिश मैं एक त्रुटि मिलती है:

: जब मैं कोशिश

String or binary data would be truncated

CONVERT(varchar(20000), Content) मैं कोई त्रुटि मिलती है

The size (20000) given to the type 'varchar' exceeds the maximum allowed for any data type (8000)

जब मैं CONVERT(text, Content) को आजमाता हूं तो मुझे एक त्रुटि मिलती है:

Explicit conversion from data type xml to text is not allowed

क्या कोई कामकाज है?

+2

'वर्कर (अधिकतम)' पर कास्टिंग करना ठीक काम करना चाहिए। [ऐसा करता है।] (Http://data.stackexchange.com/stackoverflow/query/75495)। –

+0

शायद यह तब कॉन्फ़िगरेशन है .. मुझे निश्चित रूप से एक त्रुटि मिलती है। –

+0

@MikaelEriksson - एक उत्तर के रूप में पोस्ट करें और मैं इसे स्वीकार करूंगा। मैंने एक गूंगा किया था (विशेष संदर्भ जो मैं कन्वर्ट का उपयोग कर रहा था, उस मुद्दे के कारण जो बुलबुला हुआ था)। –

उत्तर

8

कास्ट varchar(max) को ठीक से काम करना चाहिए होगा। आपको शायद कहीं और कोई समस्या है। यदि आप डेटाटाइप varchar(8000) के साथ कॉलम डालने/अपडेट करने का प्रयास करते हैं तो आपको वह त्रुटि मिल जाएगी।

+1

समस्या इसे 'हैशबाइट्स' फ़ंक्शन में पास कर रही थी जिसमें 8000 सीमा अधिकतम है :-) –

+0

मेरे द्वारा उपयोग किए जाने वाले विशेष उपयोग-मामले को लिखें: http://mattmitchell.com.au/detecting-duplicate-xml-data -इन-एसक्यूएल सर्वर / –

1

मैं इस विशेष जरूरत कभी नहीं किया था, लेकिन एक और तरीका है मैं कोशिश करेगा

SUBSTRING(CAST(Content AS VARCHAR), 1, 8000) 
+0

यह स्ट्रिंग को छोटा कर देगा, जो शायद वांछित परिणाम नहीं है। –

+0

दुर्भाग्यवश नहीं, यह आपके पास इसे घटाने का मौका मिलने से पहले कास्ट करने का प्रयास करता है> 'एक्सएमएल इंस्टेंस का प्रतिनिधित्व करने के लिए लक्ष्य स्ट्रिंग आकार बहुत छोटा है' –

+0

मेरी टिप्पणी को अनदेखा करें, यह शायद काम करेगा हालांकि सबस्ट्रिंग अनावश्यक है। –

3

जो समस्या आप चल रहे हैं उसे एक्सएमएल को वर्चर में बदलने की कोशिश करने के साथ करना है। एक XML स्ट्रिंग को कन्वर्ट करने का प्रयास करते समय मैंने एक समान समस्या में भाग लिया है जो आपके NVARCHAR में आपके से बहुत छोटा है। CONVERT से CAST तक स्विच करने से आपकी समस्या हल होनी चाहिए। जहां तक ​​आकार आप बेहतर हैं, इसे अधिकतम MAX पर सेट करें।

संबंधित मुद्दे

 संबंधित मुद्दे