首页 > 解决方案 > 有没有办法从已部署的报告 ssrs 报告中获取原始 XML 代码到报告服务器?

问题描述

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

我尝试的第一件事是使用 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 部分自动保存到一个单独的文件中,因为我们希望每个月都备份我们的报告。

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

(对于溢出来说还是相当新的,所以如果需要更多信息,请告诉我)

谢谢你

标签: tsqlreporting-servicesssrs-2012

解决方案


由 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)

推荐阅读