2016-03-24 19 views
-1

私の要件に基づいて、データblobはbase64でエンコードされたxmlであり、デコードして読み込み可能な形式である必要があるテーブルに格納する必要があります。データblobは、base64をデコードして保存する必要があるxmlです。

これはSQL/MYSQL/TSQLで行うことができますか?

こうして得られたテーブルをBIツールにプルしてレポートを作成する必要があります。私たちのBIツールは、XML形式のデータブロブをサポートしていません。

+0

質問をするときは、できるだけ具体的にお願いいたします。 base64エンコードは、基本的にVARCHAR(サイズ)フィールドであり、 '64'の基本文字の文字は連結されています。だから...あなたは何を持っているのですか? – Bonatti

+0

My SQLデータベースからBIツールにデータを取得しようとしています。 テーブルの1つに、データ型がBlobのフィールドPublicがあります。 使用しているBIツールは、.jpg、.png、.bmp、.rtfデータ形式でない限り、BLOBデータをサポートしていません。 データ型を調べるために私のビジネスをチェックしたところ、彼らは私に、データブロブはbase64でエンコードされたxmlであると答えました。 これは私が持っている唯一の情報です。 – jarus

+0

もう一度問題を指定する必要があります: 'これはSQL/MYSQL/TSQLで行うことができますか? 'はい。そのVARCHAR(またはその他の 'String-like'構造体)は既にあります。 Blobとして保存されている場合は、元のアーカイブのビット/バイトのバイナリ状態です。あなたはそれを照会し、必要に応じてファイルを読まなければなりません。 XMLファイルは通常、「キー」:「値」のペアであり、いくつかのコンテキストを許可します。これらは非線形であるため、結果をSQLから「テーブル」に直接読み込むことはできません。誰かが答えを知っていても、その質問はあなたを助けるのが難しいほど広い/不確かです。 – Bonatti

答えて

0

これは、T-SQLでのソリューションです:

クレジットに: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

これは機能しました。ありがとう。 – jarus

関連する問題