【问题标题】:SQL Server/Dynamics CRM: How to read document body from Annotation Base using SQL onlySQL Server/Dynamics CRM:如何仅使用 SQL 从注释库中读取文档正文
【发布时间】:2017-05-06 15:39:02
【问题描述】:

我正在构建一个 SSRS 报告,我需要在其中读取包含一些错误日志的 MS Word 文档正文的部分内容。文档正文存储在 SQL Server 的 AnnotationBase 中。每斯科特杜罗(MVP),

"DocumentBody 是一个 base64 编码的字符串,因此您需要 转换回二进制并保存到文件中。”

https://community.dynamics.com/crm/f/117/t/185391

我知道有一个转换器,并且还使用 SQL 尝试了以下操作:

https://blogs.msdn.microsoft.com/sqltips/2008/06/30/converting-from-base64-to-varbinary-and-vice-versa/

但是上面链接中的解决方案不起作用。

我知道这可以使用 C# 轻松完成。但是,这是我在构建报告时遇到的唯一障碍,并且希望将其全部保留为 SQL。

如果我不必纠正 .NET 组件,这是否可行?如果没有,可以使用 FetchXML 来完成吗?

【问题讨论】:

  • 什么是CRM和SQL版本?
  • CRM 2015 本地,SQL 2014

标签: sql sql-server reporting-services dynamics-crm type-conversion


【解决方案1】:

您可以在 SQL 中解码 Base64 documentbody 列,如下所示:Base64 encoding in SQL Server 2005 T-SQL

-- Encode the string "TestData" in Base64 to get "VGVzdERhdGE="
SELECT
    CAST(N'' AS XML).value(
          'xs:base64Binary(xs:hexBinary(sql:column("bin")))'
        , 'VARCHAR(MAX)'
    )   Base64Encoding
FROM (
    SELECT CAST('TestData' AS VARBINARY(MAX)) AS bin
) AS bin_sql_server_temp;

-- Decode the Base64-encoded string "VGVzdERhdGE=" to get back "TestData"
SELECT 
    CAST(
        CAST(N'' AS XML).value(
            'xs:base64Binary("VGVzdERhdGE=")'
          , 'VARBINARY(MAX)'
        ) 
        AS VARCHAR(MAX)
    )   ASCIIEncoding
;

(此外,您应该避免使用Base 表,它不受支持,请改用过滤表FilteredAnnotation)。

(此外,Word 文档的结构是复杂的 XML,在 SQL 中可能难以解析,所以这可能不是任何情况下的最佳解决方案。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-13
    相关资源
    最近更新 更多