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
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
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
It's apparently gzip'd xml. eg
SELECT MigrationId
,ContextKey
,cast(decompress(model) as xml) model
FROM __MigrationHistory
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