Questo codice traduce fondamentalmente i caratteri in base alla posizione in una stringa sul carattere nella stessa posizione in un'altra stringa e viene eseguito per tutte le righe nella tabella.PER PERCORSO XML (''): escape caratteri "speciali"
Quando ho eseguito questo (versione semplificata):
DECLARE @R char(40)
DECLARE @U char(40)
SET @R=' [email protected]#$%^&*()_+'+char(181)
SET @U=REVERSE(@R)
DECLARE @TestTable TABLE (RowID int identity(1,1) primary key, Unreadable varchar(500))
INSERT INTO @TestTable VALUES ('+µt$zw!*µsu+yt!+s$xy')
INSERT INTO @TestTable VALUES ('%*!!xµpxu!(')
INSERT INTO @TestTable VALUES ('pxpµnxrµu+yµs%$t')
;WITH CodeValues AS
(
SELECT
Number,SUBSTRING(@R,Number,1) AS R,ASCII(SUBSTRING(@U,Number,1)) AS UA
FROM Numbers
WHERE Number<=LEN(@R)
)
SELECT
t.RowID
,(SELECT
''+c.R
FROM Numbers n
INNER JOIN CodeValues c ON ASCII(SUBSTRING(t.Unreadable,n.Number,1))=c.UA
WHERE n.Number<=LEN(t.Unreadable)
FOR XML PATH('')
) AS readable
FROM @TestTable t
ottengo il seguente:
RowID readable
----------- ---------------------------------------
1 a simple translation
2 hello world
3 wow you ran this
Ma necessità:
RowID readable
----------- ---------------------------------------
1 a simple translation
2 hello world
3 wow you ran this
Esiste un modo, diverso da REPLACE()
, per visualizzare correttamente gli spazi? Questo succede anche in caso di interruzioni di linea, nel mio codice attuale.
Questo può essere riscritto in un modo migliore? Fondamentalmente ho usato lo FOR XML PATH('')
per concatenare insieme i singoli valori di riga.
I Sono certo che questo è il tuo vero codice, ma dovresti pubblicare un esempio più semplice che mostri lo stesso problema. È una quantità ragionevole di codice strano da digerire, sebbene il problema sia molto più semplice. –
@John Saunders, vorrei che fosse il mio "vero codice", perché avrei finito adesso! Mi dispiace dire che il codice finale sarà più complesso, in quanto si tratta di una piccola parte di una query. –