Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Base64-Codierung in SQL Server 2005 T-SQL

Ich weiß, dass dies bereits beantwortet wurde, aber ich habe einfach mehr Zeit damit verbracht, als ich zugeben möchte, einzeilige SQL-Anweisungen zu entwickeln, um dies zu erreichen, also werde ich sie hier teilen, falls jemand anderes dasselbe tun muss:

-- Encode the string "TestData" in Base64 to get "VGVzdERhdGE="
SELECT
    CAST(N'' AS XML).value(
          'xs:base64Binary(xs:hexBinary(sql:column("bin")))'
        , 'VARCHAR(MAX)'
    )   Base64Encoding
FROM (
    SELECT CAST('TestData' AS VARBINARY(MAX)) AS bin
) AS bin_sql_server_temp;

-- Decode the Base64-encoded string "VGVzdERhdGE=" to get back "TestData"
SELECT 
    CAST(
        CAST(N'' AS XML).value(
            'xs:base64Binary("VGVzdERhdGE=")'
          , 'VARBINARY(MAX)'
        ) 
        AS VARCHAR(MAX)
    )   ASCIIEncoding
;

Ich musste eine von einer Unterabfrage generierte Tabelle in der ersten (Codierungs-)Abfrage verwenden, da ich keine Möglichkeit finden konnte, den ursprünglichen Wert ("TestData") in seine Hex-String-Darstellung ("5465737444617461") umzuwandeln, um ihn als Argument einzufügen xs:hexBinary() in der XQuery-Anweisung.

Ich hoffe, das hilft jemandem!