2012-03-27 15 views
7

Chcę wykonać aktualizację wszystkich wierszy w kolumnie XML w SQL Server 2008, zastępując tylko podłańcuch w określonym węźle XML. Jestem nowy w XML DML/XQuery i nie wiem, jak to zrobić.Aktualizowanie podciągu w kolumnie XML SQL Server 2008

Przykład XML w kolumnie chcę zaktualizować:

<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> 

chcę wymieniać wszystkich wystąpień tego fragmentu 'src = "/ $ - 1 /' z" src = "/ $ - 1/file/'we wszystkich wierszach.

próbowałem, ale najwyraźniej nie ma możliwości, że można używać XPath zastąpić funkcję tak:

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/'')]) ') 

Odpowiedz

5

Myślę, że najprostszym rozwiązaniem jest konwersja do innego typu danych, które mogą przyjąć zastąpić (nvarchar (MAX) na przykład). Użyj funkcji Replace, a następnie przekształcić go z powrotem do XML

Coś

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

Dziękuję bardzo Jamesa! Jest to trochę bardziej "ryzykowne", nie wiedząc, w którym węźle występuje zastępowanie, ale działa dobrze dla mnie. Thanx! – Kberg