将 varchar/varbinary 的整个 table 列转换为 xml
Converting entire table column of varchar/varbinary to xml
我有一个 table,其中一列是 varbinary,它实际上包含 base64 编码的字符串。
Table: Messages
Id | int
Payload | varbinary(MAX)
我可以使用
查看其内容
select cast(Payload as varchar(max)) from Messages
但是,我需要将整个列转换为 XMl,这样就不需要这些类型的转换了,我可以将更长的字符串存储为 XML。对于单个条目,我可以做类似
的事情
select convert(xml, (select top 1 cast(payload as varchar(max))
from Messages
)
) as PayLoad
for XML PATH('');
如何将整个 table 转换为 xml?
谢谢
使用for xml path
怎么样?
select cast(Payload as varchar(max))
from Messages
for xml path ('');
您可以添加适当的注释。您也可以有多个列。文档是 here.
这应该适合你:
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;
我有一个 table,其中一列是 varbinary,它实际上包含 base64 编码的字符串。
Table: Messages
Id | int
Payload | varbinary(MAX)
我可以使用
查看其内容select cast(Payload as varchar(max)) from Messages
但是,我需要将整个列转换为 XMl,这样就不需要这些类型的转换了,我可以将更长的字符串存储为 XML。对于单个条目,我可以做类似
的事情select convert(xml, (select top 1 cast(payload as varchar(max))
from Messages
)
) as PayLoad
for XML PATH('');
如何将整个 table 转换为 xml?
谢谢
使用for xml path
怎么样?
select cast(Payload as varchar(max))
from Messages
for xml path ('');
您可以添加适当的注释。您也可以有多个列。文档是 here.
这应该适合你:
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;