Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Codificação Base64 no SQL Server 2005 T-SQL


Eu sei que isso já foi respondido, mas acabei de passar mais tempo do que gostaria de admitir criando instruções SQL de linha única para fazer isso, então as compartilharei aqui caso mais alguém precise fazer o mesmo:
-- 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
;

Eu tive que usar uma tabela gerada por subconsulta na primeira consulta (codificação) porque não consegui encontrar nenhuma maneira de converter o valor original ("TestData") em sua representação de string hexadecimal ("5465737444617461") para incluir como argumento para xs:hexBinary() na instrução XQuery.

Espero que isso ajude alguém!