2010-04-14 17 views
34

में SQL सर्वर ढूँढता है और प्रतिस्थापित करता है मेरे पास SQL ​​Server 2005 में डेटाबेस है जो SQL Server 2000 से लाया गया था और अभी भी वर्चर (अधिकतम) के बजाय टेक्स्ट प्रकार फ़ील्ड्स का उपयोग कर रहा है।SQL सर्वर टेक्स्ट फ़ील्ड में

मुझे टेक्स्ट फ़ील्ड में वर्णों की एक स्ट्रिंग को ढूंढना और प्रतिस्थापित करना है, लेकिन मुझे यह करने के तरीके के सभी उदाहरणों को ऐसा नहीं लगता है कि वे मेरे लिए काम करेंगे। ऐसा लगता है कि UPDATETEXT कमांड के लिए आवश्यक है कि दो पैरामीटर "insert_offset" और "delete_length" स्पष्ट रूप से सेट हो जाएं लेकिन जिस स्ट्रिंग को मैं खोज रहा हूं, वह किसी भी बिंदु पर या उसी सेल में कई बिंदुओं पर टेक्स्ट में दिखाई दे सकता है। इन दो मानकों की मेरी समझ यह है कि जिस स्ट्रिंग के लिए खोज रहा हूं वह हमेशा एक ही स्थान पर होगा, ताकि insert_offset टेक्स्ट में रिक्त स्थान की संख्या हो जो UPDATETEXT कमांड टेक्स्ट को बदलना शुरू कर दे।

उदाहरण: &lt;u&gt; और साथ यह बदलें:: <u>

पाठ क्षेत्र उदाहरण:

किसी को भी इस के साथ मेरी मदद कर सकते हैं खोजने की जरूरत है? धन्यवाद!

उत्तर

60

मैंने अंततः इसे समझ लिया। इसे लेख jfrobishow प्रकाशित टिप्पणियों में दफनाया गया था। बहुत बहुत धन्यवाद।

बोली::

यहाँ पूरे प्रतिक्रिया है कि मुझे समाधान के लिए नेतृत्व किया है मूल रूप से fredclown

पोस्ट आप आप एक पाठ प्रकार के साथ की जगह का उपयोग कर सकते एसक्यूएल 2005 का उपयोग करते हैं। तुम सब है क्या करने के लिए नीचे दिए गए ...

क्षेत्र = की जगह है (डाली (varchar (max के रूप में क्षेत्र)), 'स्ट्रिंग', 'प्रतिस्थापन')

आसान पाई के रूप में।

फ्रेडक्लोउन तक दो अंगूठे !!! कमांड मेरे लिए एक आकर्षण की तरह काम करता है। कि इस काट-छांट कर सकते हैं आप के आकार dbfield, लेकिन: यह है कि मैं क्या करने के लिए अपने अद्यतन बयान लिखा ढूँढें और एसक्यूएल सर्वर 2005 डेटाबेस

UPDATE TableName SET DBTextField = REPLACE(CAST(DBTextField AS varchar(MAX)) 
               ,'SearchText', 'ReplaceText') 
FROM TableName 
WHERE CHARINDEX('SearchText',CAST(DBTextField as varchar(MAX)))>0 

नोट में एक पाठ क्षेत्र में बदलें है यदि एक लंबा टेक्स्ट कॉलम है तो इसे nvarchar (अधिकतम) बनाएं और आपको कोई भी छंटनी नहीं मिलनी चाहिए!

+8

चेतावनी: यह टेक्स्टफील्ड की सामग्री को 8000 वर्ण –

+0

@incubushead धन्यवाद देगा। मुझे पता है कि यह एक पुरानी पोस्ट है लेकिन आपके द्वारा पेश किए गए इस विशिष्ट वाक्यविन्यास ने मुझे सीधे क्लाइंट साइट पर रहने में मदद की जो कि लंबे समय तक चलने वाला और कड़ी मेहनत करने के लिए अन्यथा है, इसलिए धन्यवाद। कोई भी ntext फ़ील्ड के साथ फंस गया - मैं था, ntext पर डाला नहीं है (काम नहीं करता है और बहिष्कृत है), बस यहां दिए गए वर्चर (अधिकतम) का उपयोग करें; यह सिर्फ काम करता है। कास्ट कॉलम प्रकार को परिवर्तित नहीं करता है, बस अद्यतन कैसे व्यवहार करता है-इसका उपयोग MAX से भी कम नहीं होता है यदि टेक्स्ट कुछ वर्णों से थोड़ा लंबा है और अन्यथा आपके 50 अक्षर तक छोटा हो जाता है। –

+0

क्या होगा यदि आप स्ट्रिंग को हटाना चाहते हैं और उन्हें किसी भी चीज़ से प्रतिस्थापित नहीं करना चाहते हैं? – Fandango68

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