2016-08-08 46 views
0

Angenommen Ersetzen habe ich die folgende XML:„ersetzt Wert“ Mit einem Teil to Perform

<Configuration> 
    <Formula>{X} * {Y} * {Z}</Formula> 
</Configuration> 

Ich mag würde den Wert des Formula Elements Update aber nicht der gesamte Wert ersetzen.

Zum Beispiel kann ich die replace value of Methode den gesamten Wert des Elements ändern, aber was würde Ich mag bis Ende mit etwas wie das folgende ist:

<Configuration> 
    <Formula>{LENGTH} * {Y} * {Z}</Formula> 
</Configuration> 

Natürlich, ich mag nur Um dies zu tun, finde ich den Wert "{X}" im Elementwert (think, search and replace).

Ist dies mit den XML-Methoden in T-SQL möglich? Wenn ja, kann mir jemand in die richtige Richtung zeigen?

+0

Sie auf XML-Methoden festgelegt werden? Ich bin mir nicht sicher, warum 'Select ersetzen (' {X} * {Y} * {Z}', ' {X}', ' {LENGTH}') tut nicht was Sie wollen. – scsimon

+0

Die Spalte in der Tabelle ist vom Typ XML. Ich habe Ihren Vorschlag ausprobiert und kann es zum Laufen bringen, aber ich muss die XML-Spalte als ersten Parameter in die REPLACE-Funktion umwandeln. Ich bin mir nicht sicher, ob ich das machen will (lies, ich bin mir nicht sicher, ob es effizient ist). –

+0

Ist diese Frage gelöst? Brauchen Sie weitere Hilfe? Bitte erlauben Sie mir einen Hinweis: Es wäre sehr nett von Ihnen, die Annahmeprüfung unter dem Stimmzähler der besten Antwort anzukreuzen. Dies wird 1) dieses Problem als gelöst markieren 2) es den Anhängern erleichtern, die beste Lösung zu finden 3) Punkte an den Beantworter zu zahlen und 4) Punkte an Sie zu zahlen. Sobald Sie die Grenze von 15 Punkten überschritten haben, werden Sie zusätzlich aufgefordert, über Beiträge zu stimmen. Dies ist der SO-Weg, um Danke zu sagen. Glückliche Kodierung! – Shnugo

Antwort

0

Was ist damit?

Dieser Code wird Ihre XML in einer abgeleiteten Tabelle transformieren und neu erstellen eine XML von dort ...

DECLARE @xml XML= 
'<Configuration> 
    <Formula>{X} * {Y} * {Z}</Formula> 
    <Formula>{A} * {Y} * {Z}</Formula> 
    <Formula>{A} * {X} * {X}</Formula> 
</Configuration>'; 

DECLARE @replX NVARCHAR(100)=N'LENGTH'; 

WITH AllFormulas AS 
(
    SELECT f.value('.','nvarchar(max)') AS Formula 
    FROM @xml.nodes('Configuration/Formula') AS A(f) 
) 
SELECT REPLACE(Formula,N'X',@replX) 
FROM AllFormulas 
FOR XML PATH('Formula'),ROOT('Configuration') 

Das Ergebnis

<Configuration> 
    <Formula>{LENGTH} * {Y} * {Z}</Formula> 
    <Formula>{A} * {Y} * {Z}</Formula> 
    <Formula>{A} * {LENGTH} * {LENGTH}</Formula> 
</Configuration> 
+0

Falls es in der Formel etwas wie {YX} gibt, könnten wir SELECT REPLACE schreiben (Formel, N '{X}', N '{Länge}') –