| 

.NET C# Java Javascript Exception

2
Hi zusammen,

ich habe eine SQL-Tabelle - nennen wir Sie tMail mit einer Spalte kMail. Die Spalte enthält einen XML-formatierten String.

<a:Body>Mailtext</a:Body><a:Recipient>mich@oink.de</a:Recipient><a:Subject>Betreff</a:Subject>
<a:Body>Mailtext</a:Body><a:Recipient>markus@mueller.de</a:Recipient><a:Subject>Betreff</a:Subject>
<a:Body>Mailtext</a:Body><a:Recipient>jay@jay.info</a:Recipient><a:Subject>Betreff</a:Subject>

Nun würde ich gerne alle Email-Adressen auf eine gemeinsame info@mail.com ändern.


<a:Body>Mailtext</a:Body><a:Recipient>info@mail.com</a:Recipient><a:Subject>Betreff</a:Subject>
<a:Body>Mailtext</a:Body><a:Recipient>info@mail.com</a:Recipient><a:Subject>Betreff</a:Subject>
<a:Body>Mailtext</a:Body><a:Recipient>info@mail.com</a:Recipient><a:Subject>Betreff</a:Subject>

Ich hab über Google diverse Update Replace, Substring etc-Funktionen gefunden, aber keine die meine Problemstellung lösen könnte.

Finde ich hier vielleicht einen Ideengeber? Vielen Dank :)
23.12.2014
Ibiz 21 3
1 Antwort
0
Da Sie die Daten in einem "normalen" Zeichenkettenfeld gespeichert haben, können Sie die Möglichkeiten eines XML-Feldes leider nicht nutzen.
Am besten, Sie erstellen mit den Zeichenkettenfunktionen von T-SQL eine eigene gespeicherte Funktion.

Der Pseudocode würde in etwa so aussehen:
- Startposition des gesuchten Tags mit CHARINDEX ermiiteln
- Wenn größer 0, dann neue Startposition des Tags,
Suche nach Startposition des Endetags mit CHARINDEX + LEN(Endetag) = Endeposition,
Zusammensetzen neuer Wert aus LEFT(Ausgangszeichenkette, Startposition Tag) + Tag +
neuer Wert + Endetag + SUBSTRING(Ausgangszeichenkette, Endeposition, Feldlänge)
Die neue Zeichenkette im Update verwenden.
Hier eine kleine Prozedur als Anregung:
CREATE PROCEDURE ReplaceTag(@value AS nvarchar(MAX), @Tag AS nvarchar(50), 
@ReplaceValue AS nvarchar(MAX), @RetValue nvarchar(MAX) OUTPUT)
AS BEGIN
DECLARE @StartTag AS NVARCHAR(100)
DECLARE @EndTag AS NVARCHAR(100)
DECLARE @EndPos int
DECLARE @StartPos int

SET @StartTag = '<' + @Tag + '>'
SET @EndTag = '</' + @Tag + '>'
SET @RetValue = ''
SET @StartPos = CHARINDEX(@StartTag, @value)

IF @StartPos > 0
BEGIN
SET @EndPos = CHARINDEX(@EndTag, @Value) + LEN(@EndTag) + 1
SET @RetValue = SUBSTRING(@Value, 1, @StartPos - 1) +
@StartTag + @ReplaceValue + @EndTag + SUBSTRING(@Value, @EndPos, LEN(@Value))
END
END
GO

DECLARE @Ret nvarchar(MAX)
Exec dbo.ReplaceTag '<o>Test</o><a:test>Test2</a:test>',
'a:test', 'KDR', @Ret OUTPUT
PRINT @Ret

Hoffe es hilft.
24.12.2014
edvservice 1,3k 6

Stelle deine Sql-Frage jetzt!