Spalte mit Base64 codieren

ja mei, select x,y from ... oder select x, cast(...) from ...

Du solltest versuchen, das Grundprinzip zu verstehen. Im Select-Teil einer Abfrage stehen halt Ausdrücke. Das können Spalten sein, Konstanten, Funktionen, ...
 
Werbung:
Hallo FlorianF,

erst einmal vielen Dank für deinen Thread. Ich mache recht viel mit XML auf dem SQL-Server, hatte aber bisher noch keinen Anwendungsfall der deiner Anfrage entspricht, daher finde ich den Ansatz äußerst interessant.
Deshalb habe ich mich ein wenig damit beschäftigt und auch über Google ein paar interessante Lösungsansätze dazu gefunden.
Ich habe das, was ich gefunden habe, mal in einem kleinen Beispiel zusammengefasst, das dir vielleicht weiter hilft:

Code:
-- Erstellen einer einfachen Beispiel-Tabelle
DECLARE @Table TABLE
(
    ID int,
    Nummer int,
    EinName varchar(255)
)

-- Werte in die Beispiel-Tabelle eintragen
INSERT INTO @Table (ID, Nummer, EinName)
VALUES
(1, 123, 'Vanessa'),
(2, 456, 'Claudio'),
(3, 789, 'Olaf')


-- Zur Lösung müssen die Tabellenwerte zunächst in den binären Datentyp umgewandet werden
-- Lösung hier als Beispiel über eine Laufzeit-Zwischentabelle (CTE => common table expression)
;WITH cte_ErsteKonvertierung
AS
(
    SELECT
    ID,
    Nummer,
    EinName,
    CONVERT(varbinary(max), CONVERT(varchar(25), ID)) as ID_bin,
    CONVERT(varbinary(max), CONVERT(varchar(25), Nummer)) as Nummer_bin,
    CONVERT(varbinary(max), EinName) as EinName_bin

    FROM @Table
)
-- die binären Datentypen können dann mit den XML-Befehlen zu Base64-Strings konvertiert werden
SELECT
ID,
ID_bin,
CAST(N'' AS XML).value('xs:base64Binary(xs:hexBinary(sql:column("ID_bin")))', 'VARCHAR(MAX)')  as ID_Base64Encoding,

Nummer,
Nummer_bin,
CAST(N'' AS XML).value('xs:base64Binary(xs:hexBinary(sql:column("Nummer_bin")))', 'VARCHAR(MAX)') as  Nummer_Base64Encoding,

EinName,
EinName_bin,
CAST(N'' AS XML).value('xs:base64Binary(xs:hexBinary(sql:column("EinName_bin")))' , 'VARCHAR(MAX)') as EinName_Base64Encoding

FROM cte_ErsteKonvertierung

Das Beispiel kodiert erst einmal die Werte der Tabelle in Base64-Texte. Das kann man natürlich auch wieder dekodieren.

Ich hoffe, dass dir dieses Beispiel ein wenig hilft. Wenn du an einer Stelle nicht weiter kommst oder etwas nicht verstehst, frag einfach noch einmal nach.

Vielleicht helfen dir auch die Seiten, aus denen ich meine Informationen zusammengetragen habe. Sehr interessant ist die Lösung in folgendem Blog:

und hilfreich war auch der dieser Forums-Beitrag:

Interessant fand ich auch den Ansatz mit
Code:
FOR XML PATH(''), BINARY BASE64
, was aber dann ganz anders aussieht und wieder eine XML-Auswertung über XML.nodes() notwendig macht (aber interessant...).


Viele Grüße,
Tommi
 
Werbung:
Ich bin ja kein Programmierer, kann halt nur SQL. Wiso genau will man denn in BASE64 kodieren? Mir fehlt da auch noch etwas der Kontext wann das sinnvoll ist.
 
Zurück
Oben