tsql - 有没有办法从已部署的报告 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 部分自动保存到一个单独的文件中,因为我们希望每个月都备份我们的报告。
有没有办法以这种方式将我们所有的报告保存在服务器上?
(对于溢出来说还是相当新的,所以如果需要更多信息,请告诉我)
谢谢你
解决方案
由 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)
推荐阅读
- django - 由于从“/”重定向到“https://testserver/”,在我的生产环境中获得 301 而不是 200
- swift - 如何在 Swift 中使用 OCaml 库?
- java - 如何获取 IBM Java 8 的调试信息包
- r - 如何在 R 中使用库 DT 渲染 DataTable 时使用行条件为单元格着色?
- string - 从给定双精度返回字符串的方法
- android - Python - AndroidViewClient 以高 FPS 拍摄快照
- r - 重命名 phylo 提示标签
- java - java计算器中需要小数
- c# - 并非所有 JSON 属性都发送到服务器
- angular - 带有 Bootstrap 4.1.3 的 Angular6 中的下拉菜单不起作用