有没有办法从部署的报告 ssrs 报告中获取原始 XML 代码到报告服务器?
Is there a way to get the original XML code from a deployed report ssrs report to the reporting server?
我正在尝试为我们在报告服务器上部署的所有报告创建备份,因为我没有很多权限,这被证明是困难的。
我尝试的第一件事是使用 XML FILE 和 Report Data 创建一个订阅,并将其导出到一个文件夹,当我尝试打开保存后的文件时,它只是 xml 在 ssrs.
第二次尝试是直接从 sql 服务器获取 xml,这就是布局需要使用以下查询的方式
Select
Name as ReportName
,CONVERT(XML,CONVERT(VARBINARY(MAX),Content)) AS ReportContent
from Catalog
Where Name ='report_name'
唯一的问题是我无法找到一种方法将 xml 部分自动保存到一个单独的文件中,我们可以使用它来备份,因为我们想每月备份我们的报告。
有没有办法以这种方式将我们所有的报告保存在服务器上?
(对 Overflow 还很陌生,所以如果需要更多信息,请告诉我)
谢谢
bretstateham.com 的 Courtest(我刚刚测试过并且有效):
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 FILE 和 Report Data 创建一个订阅,并将其导出到一个文件夹,当我尝试打开保存后的文件时,它只是 xml 在 ssrs.
第二次尝试是直接从 sql 服务器获取 xml,这就是布局需要使用以下查询的方式
Select
Name as ReportName
,CONVERT(XML,CONVERT(VARBINARY(MAX),Content)) AS ReportContent
from Catalog
Where Name ='report_name'
唯一的问题是我无法找到一种方法将 xml 部分自动保存到一个单独的文件中,我们可以使用它来备份,因为我们想每月备份我们的报告。
有没有办法以这种方式将我们所有的报告保存在服务器上?
(对 Overflow 还很陌生,所以如果需要更多信息,请告诉我)
谢谢
bretstateham.com 的 Courtest(我刚刚测试过并且有效):
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)