2016-03-24 4 views
1

私はvarbinaryという列の1つを持つテーブルを持っています。実際にはbase64でエンコードされた文字列が含まれています。varchar/varbinaryのテーブル列全体をxmlに変換する

Table: Messages 
Id  | int 
Payload | varbinary(MAX) 

私は

select cast(Payload as varchar(max)) from Messages 

は、しかし、私はキャストのこれらの種類が必要とされないように、XMLに列全体を変換する必要が使用してその内容を見ることができると私はXMLのようにはるかに長い文字列を格納することができます。 1つのエントリのために私は何かをすることができます

select convert(xml, (select top 1 cast(payload as varchar(max)) 
        from Messages 
        ) 
      ) as PayLoad 
for XML PATH(''); 

テーブル全体をxmlに変換するにはどうしたらいいですか?

おかげ

答えて

2

これはあなたのために働く必要があります。

CREATE TABLE #temp(ID INT,PayLoad VARBINARY(MAX)); 
INSERT INTO #temp VALUES 
       (1,CAST('AAQSkZJRgABAQEAYABgAAD/4RDmRXhpZg' AS VARBINARY(MAX))) 
       ,(2,CAST('AAAAJAAAISodpAAQAAAABAAAIVJydAAEAAAASAAAQz' AS VARBINARY(MAX))); 

--simple output 
SELECT * 
FROM #temp; 

--casted output 
SELECT ID,CAST(PayLoad AS VARCHAR(MAX)) AS PayLoad 
FROM #temp; 

--AS XML 
SELECT ID 
     ,CAST(PayLoad AS VARCHAR(MAX)) AS PayLoad 
FROM #temp 
FOR XML PATH('Row'),ROOT('root'); 

--EDIT: new SELECT 
--As table with Payload as XML 
SELECT ID 
     ,(SELECT CAST(PayLoad AS VARCHAR(MAX)) FOR XML PATH('PayLoad'),TYPE) AS PayLoad 
FROM #temp 

DROP TABLE #temp; 
+0

これは、単一のクエリでテーブル全体を返します。代わりに、私は、通常のselect文のように、XMLとして各行に対してbase64列を表示して、すべての行を取得したいとします。 「SELECT Id、CAST(PayLoad AS varchar(MAX))」のようなものがあります。これは、デコードされた文字列内のペイロードを持つグリッドとしてテーブル全体を返します。私はそれが各行の代わりにXMLであることを望みます – sppc42

+0

あなたのbase64文字列の内容はXMLですか?あなたが書いているものを与えるために私のコードにもう1つの選択を加えたが、これはあなたが望むものだとは思わない。... – Shnugo

+0

それはちょうど完璧な、感謝! – sppc42

0

どうfor xml pathを使用してはどうですか?

select cast(Payload as varchar(max)) 
from Messages 
for xml path (''); 

適切な注釈を含めることができます。複数の列を持つこともできます。ドキュメントはhereです。

+0

これは、単一のクエリ内のテーブル全体を返します。代わりに、私は、通常のselect文のように、XMLとして各行に対してbase64列を表示して、すべての行を取得したいとします。 「SELECT Id、CAST(PayLoad AS varchar(MAX))」のようなものがあります。これは、デコードされた文字列内のペイロードを持つグリッドとしてテーブル全体を返します。私はそれが各行の代わりにXMLであることを望みます – sppc42

関連する問題