2009-03-12 17 views
5

में बदलें एक तालिका है जिसमें ntext फ़ील्ड है। MSDN का कहना है कि ntext बहिष्कृत हो गई है और वे अन्य डेटा प्रकार का सुझाव:कॉलम प्रकार को ntext से varbinary (अधिकतम)

ntext, text, and image data types will be removed in a future version of Microsoft SQL Server. Avoid using these data types in new development work, and plan to modify applications that currently use them. Use nvarchar(max), varchar(max), and varbinary(max) instead.

मेरी विशेष मामले में यह varbinary(max) करने के लिए स्विच करने के लिए निर्णय लिया गया। मैंने टेबल परिभाषा को बदलने की कोशिश की लेकिन यह काम नहीं किया।

ALTER TABLE MyTable ALTER COLUMN MyColumn VARBINARY(MAX); 

संभावनाओं varbinary(max) के प्रकार बदलने के लिए क्या हैं? nvarchar(max)> और फिर nvarchar(max) से - - मैं ntext से प्रकार बदलने की कोशिश की>varbinary(max) लेकिन यह संभव (त्रुटि: डेटा प्रकार nvarchar (अधिकतम से अंतर्निहित रूपांतरण) varbinary (अधिकतम) अनुमति नहीं है) नहीं है।

एकमात्र कामकाजी समाधान varbinary(max) के नए कॉलम को जोड़ने के लिए है, मौजूदा मान को नए कॉलम में कनवर्ट करें और फिर पुराने कॉलम को छोड़ दें। यह बहुत समय लगता है (मेरे डेटासेट पर लगभग 15 जीबी में लगभग 30 मिनट लगते हैं)। यही कारण है कि मैं इसे प्राप्त करने के लिए अन्य संभावनाओं की जांच कर रहा हूं (संभावित रूप से जगह = डेटा और रूपांतरण के बिना)।

उत्तर

3

मुझे लगता है कि आप varbinary (अधिकतम) के साथ गए क्योंकि आपके ntext कॉलम में इसमें कोई टेक्स्टुअल डेटा नहीं था? उस स्थिति में, मुझे लगता है कि आपको अपनी तालिका में एक अलग varbinary (अधिकतम) कॉलम जोड़ना होगा, फिर ntext से नए कॉलम में कॉपी करने के लिए एक रूपांतरण ऑपरेशन चलाएं। फिर, पुराने कॉलम को हटाएं, और पुराने कॉलम पर नए कॉलम का नाम बदलें।

"डेटा प्रकार nvarchar (अधिकतम) varbinary (अधिकतम) की अनुमति नहीं है से अंतर्निहित रूपांतरण" का अर्थ है कि आप रूपांतरण बारे में स्पष्ट होना करने के लिए जा रहे हैं।

+0

हाँ, मैंने उस कॉलम में टेक्स्ट संपीड़ित किया है। –

+0

उत्तर के लिए धन्यवाद। मुझे लगता है कि हमें रूपांतरण चलाने होंगे। –

0

ऐसा लगता है कि इस रूपांतरण को कुछ बिंदु पर होने वाला है। यदि आप खोज करते हैं, तो आपको टेक्स्ट से वर्चर (अधिकतम) में जाने वाले बहुत से लोग मिलेंगे और यह बताएंगे कि इसे बदलने में 20+ मिनट लगते हैं। कुछ मिनटों के लिए शोध करने के बाद मेरे दो सेंट, इसलिए इसे सुसमाचार के रूप में न लें।

अपनी मेज सिर्फ आवेषण लेता है, तो आप एक होल्डिंग तालिका में मौजूदा डेटा को बदलने और उसके बाद तालिकाओं का नाम बदलने ताकि पकड़े तो उत्पादन है सकता है। फिर अपने डाउन टाइम के दौरान पुरानी तालिका से किसी भी नव निर्मित डेटा को स्थानांतरित करें।

अद्यतनों को संभालने से चीजों को और अधिक जटिल बना दिया जाता है।

+0

उत्तर के लिए बहुत बहुत धन्यवाद। हाँ, आप शायद सही हो। मैं उम्मीद कर रहा था कि ऐसा करने का एक और तरीका था। धन्यवाद। –

0

अतिरिक्त स्तंभ जोड़ना शायद जाने के लिए सबसे अच्छा तरीका है। मैं कम करने के लिए चरणों में बात इस तरह का कर एहसान जोखिम

  1. के रूप में नल
  2. स्तंभ varbinary (अधिकतम) जोड़े अपने खाली समय में दोनों स्तंभ
  3. पॉप्युलेट करने के लिए अपने डालने कोड को संशोधित करें, रात भर कहते हैं, को चलाने एक कास्ट
  4. साथ अद्यतन बयान पुराने स्तंभ के लिए सभी कोड समर्थन निकालें, नया स्तंभ सुनिश्चित
  5. ड्रॉप पुराने कॉलम पढ़ने के लिए है, और नया स्तंभ बदल गैर अशक्त होने के लिए अगर
0 की जरूरत
+0

उत्तर के लिए बहुत बहुत धन्यवाद। मेरे पास वर्तमान में यही है। मैं एक विकल्प की तलाश में था लेकिन मुझे लगता है कि कोई नहीं है। –

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