Преобразование всего столбца таблицы varchar/varbinary в xml
У меня есть таблица с одним из столбцов как 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('');
Как мне преобразовать всю таблицу в 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;
Как насчет использования for xml path
?
select cast(Payload as varchar(max))
from Messages
for xml path ('');
Вы можете включить соответствующие аннотации. Вы также можете иметь несколько столбцов. Документация здесь.