কোনও পাঠ্য বা নেটেক্সট ডেটাটাইপের জন্য প্রতিস্থাপনের বিকল্প


101

আমাকে ডেটাটেবল.কলেমে ডেটা আপডেট / প্রতিস্থাপন করতে হবে। টেবিলের একটি ক্ষেত্র রয়েছে Content। আমি REPLACEফাংশন ব্যবহার করছি । যেহেতু কলামটি ডেটাটাইপ NTEXT, তাই এসকিউএল সার্ভার আমাকে REPLACEফাংশনটি ব্যবহার করার অনুমতি দেয় না ।

আমি ডেটাটাইপটি পরিবর্তন করতে পারি না কারণ এই ডাটাবেসটি তৃতীয় পক্ষের সফ্টওয়্যার টেবিল। ডেটাটাইপ পরিবর্তন করার ফলে অ্যাপ্লিকেশনটি ব্যর্থ হবে।

UPDATE [CMS_DB_test].[dbo].[cms_HtmlText] 
SET Content = REPLACE(Content,'ABC','DEF') 
WHERE Content LIKE '%ABC%' 

আমি এই ত্রুটিটি পেয়েছি:

এমএসজি 8116, স্তর 16, রাজ্য 1, লাইন 1 আর্গুমেন্ট ডেটা টাইপ এনটেক্সট প্রতিস্থাপন ফাংশনের 1 টি আর্গুমেন্টের জন্য অবৈধ।

  • আমি কি এটি টি-এসকিউএল দিয়ে ঠিক করতে পারি? কারও কাছে কী কীভাবে পড়তে হয় এবং লুপ করা যায় তার উদাহরণ রয়েছে?
  • যেহেতু এটি ওয়ানটাইম রূপান্তর, সম্ভবত আমি অন্য কোনও ধরণে পরিবর্তন করতে পারি তবে আমি ভয় করি যে আমি ডেটা গুছিয়ে নিচ্ছি।

একটি প্রাথমিক কী ক্ষেত্র রয়েছে: নাম: আইডি - পূর্ণসংখ্যা - এটি একটি পরিচয় .... সুতরাং আমার এটি সম্পর্কেও চিন্তা করা দরকার। সম্ভবত পরিচয়টি অস্থায়ীভাবে সেট করুন।

দয়া করে কীভাবে রিপ্লেস কার্য সম্পাদন করবেন সে সম্পর্কে পরামর্শ দিন?

প্রায়. নতুন সমাধান সহ 3000 স্টেটমেন্ট আপডেট করা দরকার।


এটি কি এসকিউএল সার্ভার 2000?
পি.কম্পবেল

উত্তর: আমি এসকিউএল ২০০৮ ব্যবহার করছি ... এবং ডেটাবেসে সামঞ্জস্যতা স্তর 2000 (80) রয়েছে। আমি যদি ২০০৮ এও পরিবর্তন করি তবে কি কাজ হবে? যেহেতু আমি এখনও পরিণতিগুলি জানি না আমি সামঞ্জস্যতা স্তরের 2000 এ রেখেছি, তবে এটি এসকিউএল ২০০৮ ডাটাবেস। এটি এক সময় রূপান্তর ...
এথেম

উত্তর:


197

যদি আপনার ডেটা 4000 টি অক্ষর উপচে না পড়ে এবং আপনি এসকিউএল সার্ভার 2000 বা 8 বা এসকিউএল সার্ভার 2000 এর সামঞ্জস্যের স্তরে থাকেন:

UPDATE [CMS_DB_test].[dbo].[cms_HtmlText] 
SET Content = CAST(REPLACE(CAST(Content as NVarchar(4000)),'ABC','DEF') AS NText)
WHERE Content LIKE '%ABC%' 

এসকিউএল সার্ভার 2005+ এর জন্য:

UPDATE [CMS_DB_test].[dbo].[cms_HtmlText] 
SET Content = CAST(REPLACE(CAST(Content as NVarchar(MAX)),'ABC','DEF') AS NText)
WHERE Content LIKE '%ABC%' 

3
কেবল একটি তাত্ক্ষণিক প্রশ্ন, দ্বিতীয় castালাই NTextকি সত্যিই প্রয়োজনীয়? আমি মনে করি যে নির্ধারণ NVarchar(MAX)করা NTextএটি স্বয়ংক্রিয়ভাবে কাস্ট হবে।
তাহির হাসান

3
দুর্দান্ত সহজ ফিক্স। কেবল একটি নোট যে 2005+ এনভিচার (সর্বোচ্চ) এর 4000 চর সীমা নেই। আমি জানি এটি সুস্পষ্ট (এখন, আমার কাছে) তবে আমি প্রথমে এটি পড়লাম যেন উভয় উত্তরের সীমা ছিল।
গুডেয়ে

16

এসকিউএল সার্ভার 2000 ধরে নিলে , নিম্নলিখিত স্ট্যাকওভারফ্লো প্রশ্নটি আপনার সমস্যার সমাধান করবে।

যদি এসকিউএল সার্ভার 2005/2008 ব্যবহার করে থাকেন তবে আপনি নিম্নলিখিত কোডটি ব্যবহার করতে পারেন ( এখান থেকে নেওয়া ):

select cast(replace(cast(myntext as nvarchar(max)),'find','replace') as ntext)
from myntexttable
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.