2016-03-24 2 views
-1

Basierend auf meiner Anforderung haben wir Daten Blobs sind xml, die Base64 codiert wurden, müssen entschlüsselt und in Tabellen, die in lesbarem Format sein müssen.Daten Blobs sind xml, die Base64 müssen entschlüsselt und gespeichert werden

Kann dies in SQL/MYSQL/TSQL getan werden?

Ich muss die so erhaltenen Tabellen zu unserem BI-Tool ziehen und Berichte erstellen. Unser BI-Tool unterstützt keine Datenblobs im xml-Format.

+0

Wenn Sie eine Frage stellen, versuchen, so genau wie möglich zu sein. Eine Base64-Codierung ist im Grunde genommen ein VARCHAR-Feld (Größe), wobei die Buchstaben der 64-Basen-Verkettung verkettet sind. Also ... was ist das Problem, das du hast? – Bonatti

+0

Ich versuche, die Daten aus meiner SQL-Datenbank in unserem BI-Tool abzurufen. Eine der Tabellen hat ein Feld Public, dessen Datentyp Blob ist. Das BI-Tool, das ich verwende, unterstützt keine BLOB-Daten, es sei denn, sie sind .jpg, .png, .bmp, .rtf-Datenformate. Als ich mit meinem Unternehmen nach dem Datentyp suchte, antworteten sie mir, dass Datenblobs xml sind, die Base64-codiert wurden. An diesem Punkt ist dies die einzige Information, die ich habe. – jarus

+0

Wieder müssen Sie Ihr Problem angeben: 'Kann dies in SQL/MYSQL/TSQL getan werden?' Ja. Es ist bereits ein VARCHAR (oder eine andere "String-ähnliche" Struktur). Wenn sie als Blob gespeichert sind, handelt es sich um einen Binärzustand der Bits/Bytes aus dem ursprünglichen Archiv. Sie müssen das abfragen und dann die Datei nach Bedarf lesen. XML-Dateien sind normalerweise "Schlüssel": "Wert" -Paare, die einen bestimmten Kontext zulassen. Da diese nicht linear sind, ist es unwahrscheinlich, dass Sie sie direkt aus SQL in "Tabelle" der Ergebnisse lesen können. Selbst wenn jemand die Antwort kennt, ist die Frage so breit/unsicher, dass es schwer ist, Ihnen zu helfen. – Bonatti

Antwort

0

Dies ist eine Lösung mit T-SQL:

Credits: https://stackoverflow.com/a/32231832/5089204

DECLARE @x XML='<root><Test name="checkTest">TestValue</Test></root>'; 
SELECT @x; 

--This is the XML string in base64 
DECLARE @xBase64 VARCHAR(MAX)='PHJvb3Q+DQogIDxUZXN0IG5hbWU9ImNoZWNrVGVzdCI+VGVzdFZhbHVlPC9UZXN0Pg0KPC9yb290Pg=='; 

CREATE TABLE #testBase64(ID INT, SomeBLOB VARBINARY(MAX)); 
INSERT INTO #testBase64 VALUES(1,CAST(@xBase64 AS VARBINARY(MAX))); 

SELECT ID 
     ,SomeBLOB       AS TheBLOB_as_HexString 
     ,CAST(SomeBLOB AS VARCHAR(MAX)) AS TheBLOB_back_to_Base64 

     --taken from here: https://stackoverflow.com/a/32231832/5089204 
     ,CAST(CAST(CAST(CAST(SomeBLOB AS VARCHAR(MAX)) AS XML).value('.','varbinary(max)') AS VARCHAR(MAX)) AS XML) AS Back_to_XML 

FROM #testBase64; 

DROP TABLE #testBase64; 

/* 
    The results 
    Hex-String: 0x50484A766233512B44516F67494478555A584E304947356862575539496D4E6F5A574E725647567A6443492B5647567A64465A686248566C504339555A584E305067304B504339796232393050673D3D 
    Base64:  PHJvb3Q+DQogIDxUZXN0IG5hbWU9ImNoZWNrVGVzdCI+VGVzdFZhbHVlPC9UZXN0Pg0KPC9yb290Pg== 
    XML again: <root><Test name="checkTest">TestValue</Test></root> 
*/ 
+0

Das hat funktioniert. Vielen Dank. – jarus

Verwandte Themen