2012-03-27 16 views
7

में सबस्ट्रिंग अपडेट करें मैं SQL सर्वर 2008 में किसी XML कॉलम में सभी पंक्तियों पर एक अद्यतन करना चाहता हूं, केवल एक निश्चित xml नोड में एक सबस्ट्रिंग को प्रतिस्थापित करना चाहता हूं। मैं एक्सएमएल डीएमएल/एक्सक्वियर के लिए नया हूं और यह सब कुछ और मैं सिर्फ यह नहीं समझ सकता कि इसे कैसे किया जाए। 1 - -/$ ' "' src = साथएक्सएमएल कॉलम एसक्यूएल सर्वर 2008

<d> 
    <p n="Richedit01" t="System.String"> 
    <v> 
     &lt;p&gt; &lt;img border="0" alt="Football4" src="/$-1/football4.jpg" /&gt; &lt;/p&gt; 
    </v> 
    </p> 
</d> 

मैं-स्ट्रिंग की सभी आवृत्तियां बदलना चाहते हैं 1// $" src = ': कॉलम में XML का

उदाहरण मैं अद्यतन करना चाहते/फाइल/'सभी पंक्तियों में।

इस की कोशिश की लेकिन जाहिरा तौर पर कोई रास्ता नहीं है कि मैं XPath का उपयोग कर सकते इस तरह समारोह की जगह है:

UPDATE Translation 
SET ContentData.modify('replace value of (d/p[@t=''System.String'']/v)[1] with (d/p[@t=''System.String'']/v[replace(.,''src="/$-1/'',''src="/$-1/file/'')]) ') 

उत्तर

5

मुझे लगता है कि सबसे आसान समाधान एक और डेटाप्रकार कि की जगह (nvarchar स्वीकार कर सकते हैं कन्वर्ट करने के लिए है (मैक्स) उदाहरण के लिए)। REPLACE फ़ंक्शन का उपयोग करें, और फिर इसे वापस करने के लिए एक्सएमएल परिवर्तित

तरह

UPDATE Translation SET 
ContentData = CAST(REPLACE(CAST(ContentData AS NVARCHAR(MAX)), '/$-1/','/$-1/file/') AS XML) 
+0

आपको बहुत बहुत जेम्स धन्यवाद! यह थोड़ा और अधिक "जोखिम भरा" है यह नहीं जानता कि प्रतिस्थापन नोड किस प्रकार होता है, लेकिन यह मेरे लिए ठीक काम करता है। Thanx! – Kberg

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