【问题标题】:Is there a way to get the original XML code from a deployed report ssrs report to the reporting server?有没有办法从已部署的报告 ssrs 报告中获取原始 XML 代码到报告服务器?
【发布时间】:2020-01-25 20:45:23
【问题描述】:

我正在尝试为我们在报告服务器上部署的所有报告创建备份,因为我没有太多权限,这证明很困难。

我尝试的第一件事是使用 XML 文件和报告数据创建订阅,并将其导出到文件夹,当我尝试打开文件后,它只是 xml 在 ssrs 中的一部分。

第二次尝试是直接从 sql server 获取 xml,这是布局需要使用以下查询的方式

    Select 
    Name as ReportName
    ,CONVERT(XML,CONVERT(VARBINARY(MAX),Content)) AS ReportContent 
    from Catalog
    Where Name ='report_name' 

唯一的问题是我无法找到一种方法将 xml 部分自动保存到一个单独的文件中,以便我们可以用于备份,因为我们希望每个月都备份我们的报告。

有没有办法以这种方式将我们所有的报告保存在服务器上?

(对于 Overflow 来说还是个新手,所以如果需要更多信息,请告诉我)

谢谢

【问题讨论】:

    标签: tsql reporting-services ssrs-2012


    【解决方案1】:

    bretstateham.com 的法庭(我刚刚测试过,它有效):

    WITH ItemContentBinaries AS
    (
      SELECT
         ItemID,Name,[Type]
        ,CASE Type
           WHEN 2 THEN 'Report'
           WHEN 5 THEN 'Data Source'
           WHEN 7 THEN 'Report Part'
           WHEN 8 THEN 'Shared Dataset'
           ELSE 'Other'
         END AS TypeDescription
        ,CONVERT(varbinary(max),Content) AS Content
      FROM ReportServer.dbo.Catalog
      WHERE Type IN (2,5,7,8)
    ),
    --The second CTE strips off the BOM if it exists..
    ItemContentNoBOM AS(
      SELECT
         ItemID,Name,[Type],TypeDescription
        ,CASE
           WHEN LEFT(Content,3) = 0xEFBBBF
             THEN CONVERT(varbinary(max),SUBSTRING(Content,4,LEN(Content)))
           ELSE
             Content
         END AS Content
      FROM ItemContentBinaries
    )
    --The old outer query is now a CTE to get the content in its xml form only...
    ,ItemContentXML AS
    (
      SELECT
         ItemID,Name,[Type],TypeDescription
        ,CONVERT(xml,Content) AS ContentXML
     FROM ItemContentNoBOM
    )
    --now use the XML data type to extract the queries, and their command types and text....
    SELECT
         ItemID,Name,[Type],TypeDescription,ContentXML
        ,ISNULL(Query.value('(./*:CommandType/text())[1]','nvarchar(1024)'),'Query') AS CommandType
        ,Query.value('(./*:CommandText/text())[1]','nvarchar(max)') AS CommandText
    FROM ItemContentXML
    --Get all the Query elements (The "*:" ignores any xml namespaces)
    CROSS APPLY ItemContentXML.ContentXML.nodes('//*:Query') Queries(Query)
    

    【讨论】:

    • 这很好用,但是有没有办法让链接版本的 xml 导出到另一个文档,这样我就可以将它直接加载到 ssrs 并让它拉出报告?
    • @Aamert,试试这个:gallery.technet.microsoft.com/scriptcenter/…,它将使用 SQL 下载 RDL 并保存为 .rdl 文件,然后您可以将其直接上传到报告管理器。这是我们使用的。
    • 非常感谢!已经厌倦了每月手动备份 800 多份报告。
    猜你喜欢
    • 1970-01-01
    • 2019-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多