【问题标题】:Convert Image Type Data to XML/Plain Text in SQL Server在 SQL Server 中将图像类型数据转换为 XML/纯文本
【发布时间】:2016-04-18 01:59:33
【问题描述】:

我正在处理SSRS 报告。

我有数据类型为Image 的内容。我想将其转换为plain-textXML。有可能吗?

我没有提供样本数据,因为数据量很大。 (整个报告内容保存到图片以便我们理解)

建议我最好的解决方案。

【问题讨论】:

    标签: sql-server xml reporting-services sql-server-2012 sql-server-2014


    【解决方案1】:

    在下面尝试并正常工作,但将额外的字符串附加到输出中,例如 

    使用 RIGHT() 删除前 3 个字符 - 工作正常

    SELECT 
    RIGHT(CONVERT(VARCHAR(MAX),CONVERT(VARCHAR(MAX),CONVERT(VARBINARY(MAX) ,ImageDataField))),
    LEN(CONVERT(VARCHAR(MAX),CONVERT(VARCHAR(MAX),CONVERT(VARBINARY(MAX) ,ImageDataField))))-3)
    

    【讨论】:

    • 这是一个 UTF-8 BOM。 varchar 需要 ASCII。 nvarchar 可能会稍微好一些,但我认为它有望与 UCS-2 一起使用。
    • 那我该怎么办?你能帮我么?我尝试使用NVARCHAR(),但输出仍然相同。
    • 没有简单的答案。您已存储 UTF-8 数据,但 SQL Server 不理解该编码。这可以通过以下方式解决:a)更新存储此数据的任何代码以不发出 UTF-8 BOM(毕竟,这是可选的,实际上并不推荐),然后 b)更正现有数据以将其删除。跨度>
    • 好的,谢谢。顺便说一句,我正在从报表服务器目录表中检索此数据。所以我认为在保存 ssrs 报告的同时必须改变这种格式。
    • 如果您知道这三个字符始终出现在文件的开头,并且您无法更改存储图像的过程,则可以在您的选择中删除前三个字符。
    【解决方案2】:

    尝试如下,

    CREATE TABLE #a (id IMAGE )
    
    INSERT INTO #a VALUES('imagedata' )
    
    SELECT CONVERT(IMAGE ,CONVERT(VARCHAR(MAX) ,CONVERT(VARBINARY(MAX) ,ID))) AS  'TEXT TO IMAGE' FROM   #a
    
    SELECT CONVERT(VARCHAR(10),CONVERT(VARCHAR(MAX) ,CONVERT(VARBINARY(MAX) ,ID))) ' IMAGE TO TEXT ' FROM   #a
    
    DROP TABLE #a
    

    希望对你有帮助

    【讨论】:

    • 试过了。没有给出正确的数据。图像到文本的输出是 - <?xml v
    【解决方案3】:

    您可以使用 XML 将图像转换为 base64 字符串 如果你的表名是 Images

    select * from Images FOR XML PATH('Images')
    

    输出会是这样的

    <Images>
      <ImageID>2</ImageID>
      <Img>/9j/4TfsRXhpZgAATU0AKgAAAAgACgEPAAIAAAAGAAAAhgEQAAIAAAAKAAAAjAESAAMAAAABAAEAAA</Img>
    </Images>
    

    【讨论】:

      【解决方案4】:

      当当前数据库是 ReportServer 数据库时,这适用于 SQL Server Management Studio。

      -- given a NonRemitted_detail.rdl file that was deployed to a report server on path /Jacket Generator 
      -- the contents can be found as XML with this:
      SELECT CONVERT(XML, CONVERT(VARBINARY(MAX), Content)) AS rdl_file_content
          FROM ReportServer.dbo.[Catalog]
          WHERE [Path] = N'/Jacket Generator/NonRemitted_detail'
      

      几乎相同。 XML 元素之间的空白已被去除。缺少打开的 XML 声明。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-06
        • 2020-04-07
        相关资源
        最近更新 更多