sql >> Base de Datos >  >> RDS >> Sqlserver

Codificación Base64 en SQL Server 2005 T-SQL

Sé que esto ya ha sido respondido, pero pasé más tiempo del que me gustaría admitir en la creación de declaraciones SQL de una sola línea para lograr esto, así que las compartiré aquí en caso de que alguien más necesite hacer lo mismo:

-- 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
;

Tuve que usar una tabla generada por subconsulta en la primera consulta (codificación) porque no pude encontrar ninguna forma de convertir el valor original ("TestData") a su representación de cadena hexadecimal ("5465737444617461") para incluir como argumento a xs:hexBinary() en la instrucción XQuery.

¡Espero que esto ayude a alguien!