【问题标题】:Converting entire table column of varchar/varbinary to xml将 varchar/varbinary 的整个表列转换为 xml
【发布时间】:2016-03-24 11:41:56
【问题描述】:

我有一个表,其中一列是 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?

谢谢

【问题讨论】:

    标签: sql sql-server xml sqlxml


    【解决方案1】:

    这应该适合你:

    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;
    

    【讨论】:

    • 这将在单个查询中返回整个表。相反,我想要的是我得到所有的行,就像在普通的选择语句中一样,每行的 base64 列显示为 XML。像“SELECT Id, CAST(PayLoad AS varchar(MAX)) as PayLoad FROM Messages”之类的东西。这将把整个表格作为一个网格返回给我,其中的有效载荷是解码字符串。我希望它是 XML 而不是每一行
    • 你的base64字符串的内容是XML吗?我在我的代码中添加了一个选择来给你你正在写的东西,但我怀疑这就是你想要的......
    【解决方案2】:

    for xml path怎么样?

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

    您可以包含适当的注释。您还可以有多个列。文档是here

    【讨论】:

    • 这将在单个查询中返回整个表。相反,我想要的是我得到所有的行,就像在普通的选择语句中一样,每行的 base64 列显示为 XML。像“SELECT Id, CAST(PayLoad AS varchar(MAX)) as PayLoad FROM Messages”之类的东西。这将把整个表格作为一个网格返回给我,其中的有效载荷是解码字符串。我希望它是 XML 而不是每一行
    猜你喜欢
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-08
    相关资源
    最近更新 更多