Retrieve varbinary value as BASE64 in MSSQL

前端 未结 4 921
旧巷少年郎
旧巷少年郎 2020-12-10 13:46

I\'m looking for a way for retrieving Entity Data Model (EDM) from __MigrationHistory table using only T-SQL (so anyone, using Microsoft SQL Se

相关标签:
4条回答
  • 2020-12-10 14:25

    Necromancing.
    You can also use for JSON PATH similar to how for XML PATH is used:

    SELECT 
         T_AP_Dokumente.DK_UID 
        ,T_AP_Dokumente.DK_Thumbnail 
        ,tBase64.JSON_Thumbnail 
        ,NULLIF(T.XML_Thumbnail, '') AS base64  
    
    
        ,COMPRESS(T_AP_Dokumente.DK_Thumbnail) AS gzipped 
        ,DATALENGTH(COMPRESS(T_AP_Dokumente.DK_Thumbnail)) AS dlt_datalength_gzipped 
        ,DATALENGTH(T_AP_Dokumente.DK_Thumbnail) AS dlt_datalength 
        ,DATALENGTH(DECOMPRESS(COMPRESS(T_AP_Dokumente.DK_Thumbnail))) AS should_equal_dlt_datalength 
    FROM T_AP_Dokumente 
    
    CROSS APPLY 
    (
        SELECT T_AP_Dokumente.DK_Thumbnail AS '*' FOR XML PATH('')
    ) AS T(XML_Thumbnail)
    
    CROSS APPLY 
    (
        SELECT * FROM 
        OPENJSON 
        (
            (
                SELECT T_AP_Dokumente.DK_Thumbnail AS JSON_Thumbnail 
                FOR JSON PATH 
            )
        ) WITH(JSON_Thumbnail varchar(MAX)) AS t 
    ) AS tBase64 
    
    0 讨论(0)
  • 2020-12-10 14:38

    Finally found this article:

    https://social.technet.microsoft.com/wiki/contents/articles/36388.transact-sql-convert-varbinary-to-base64-string-and-vice-versa.aspx#Convert_VARBINARY_to_Base64_String

    So, running the query gets what I wanted, valid Base64.

    Using XML and the hint "for xml path"

    select Model, baze64
    from __MigrationHistory
    cross apply (select Model as '*' for xml path('')) T (baze64)
    

    Other presented queries in article will also work

    Using XML XQuery

    Using JSON

    0 讨论(0)
  • 2020-12-10 14:38

    It's apparently gzip'd xml. eg

    SELECT MigrationId
          ,ContextKey
          ,cast(decompress(model) as xml) model
      FROM __MigrationHistory
    
    0 讨论(0)
  • You can Convert binary to Base64 using XML and the hint "for xml path"

    select Column1,ColumnWithBinary,ColumnToSwFinalResult
    from TableWithBinary
    cross apply (select ColumnWithBinaryas '*' for xml path('')) T (ColumnToSwFinalResult)
    GO
    

    0 讨论(0)
提交回复
热议问题