एक पाठ या पाठ डेटाटाइप पर उत्तर देने के लिए विकल्प


101

मुझे डेटा को datatable.column में अपडेट / प्रतिस्थापित करना होगा। तालिका में नाम का एक फ़ील्ड है Content। मैं REPLACEफंक्शन का इस्तेमाल कर रहा हूं । चूंकि स्तंभ डेटाटाइप है NTEXT, SQL सर्वर मुझे REPLACEफ़ंक्शन का उपयोग करने की अनुमति नहीं देता है ।

मैं डेटाटाइप को नहीं बदल सकता क्योंकि यह डेटाबेस 3rd पार्टी सॉफ्टवेयर टेबल है। डेटाटाइप को बदलने से एप्लिकेशन विफल हो जाएगा।

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

मुझे यह त्रुटि मिली:

Msg 8116, Level 16, State 1, Line 1 Argument data type ntext, बदले हुए फ़ंक्शन के तर्क 1 के लिए अमान्य है।

  • क्या मैं इसे टी-एसक्यूएल के साथ ठीक कर सकता हूं? क्या किसी के पास एक उदाहरण है कि कैसे पढ़ें और लूप करें?
  • चूंकि यह आजीवन रूपांतरण है, शायद मैं दूसरे प्रकार में बदल सकता हूं लेकिन मुझे डर है कि मैं डेटा गड़बड़ कर रहा हूं।

एक प्राथमिक कुंजी फ़ील्ड है: नाम: आईडी - पूर्णांक - यह एक पहचान है .... इसलिए मुझे इस बारे में भी सोचने की आवश्यकता है। शायद पहचान को N अस्थायी पर सेट करें।

कृपया सलाह दें कि REPLACE फ़ंक्शन कैसे प्राप्त करें?

लगभग। 3000 बयानों को एक नए समाधान के साथ अद्यतन करने की आवश्यकता है।


क्या यह SQL Server 2000 है?
p.campbell

उत्तर: मैं SQL2008 का उपयोग कर रहा हूं ... और DATABASE में संगतता स्तर 2000 (80) है। अगर मैं इसे भी 2008 में बदल दूं तो यह काम करेगा? चूंकि मुझे अभी तक परिणाम नहीं पता है कि मैंने संगतता स्तर 2000 पर छोड़ दिया है, लेकिन यह SQL 2008 डेटाबेस है। यह एक बार रूपांतरण है ...
ethem

जवाबों:


197

यदि आपका डेटा 4000 वर्णों से अधिक नहीं होगा और आप SQL Server 2000 या संगतता स्तर 8 या SQL Server 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%' 

SQL सर्वर 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
बस एक त्वरित प्रश्न, क्या NTextवास्तव में आवश्यक दूसरा कलाकार है? मुझे लगता है कि इसे असाइन NVarchar(MAX)करने से NTextयह स्वचालित रूप से डाली जाएगी।
ताहिर हसन

3
महान सरल तय। बस ध्यान दें कि 2005+ nvarchar (अधिकतम) में 4000 char की सीमा नहीं है। मुझे पता है कि यह स्पष्ट है (अब, मेरे लिए), लेकिन मैंने पहले इसे पढ़ा जैसे कि दोनों जवाबों में यह सीमा थी।
गोयडे

16

SQL Server 2000 को मानते हुए, निम्नलिखित StackOverflow प्रश्न को आपकी समस्या का समाधान करना चाहिए।

यदि SQL Server 2005/2008 का उपयोग कर रहे हैं, तो आप निम्न कोड ( यहां से लिया गया ) का उपयोग कर सकते हैं :

select cast(replace(cast(myntext as nvarchar(max)),'find','replace') as ntext)
from myntexttable
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.