Есть ли способ получить исходный код XML из развернутого отчета ssrs отчета на сервер отчетов? - PullRequest
0 голосов
/ 25 сентября 2019

Я пытаюсь создать резервные копии для всех наших развернутых отчетов на сервере отчетов, так как у меня не так много разрешений, это вызывает трудности.

Первое, что я попробовал, было создание подписки сФАЙЛ XML и данные отчета, и если он был экспортирован в папку, когда я пытаюсь открыть файл после его сохранения, это только часть того, что было в XML в ssrs.

Вторая попытка была получить XML непосредственно изSQL Server, который должен использовать макет, используя следующий запрос

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

Единственная проблема в том, что я не смог найти способ автоматического сохранения частей XML в отдельный файл, который мы можем использоватьдля резервного копирования, поскольку мы хотим делать резервные копии наших отчетов каждый месяц.

Есть ли способ сохранить все наши отчеты на сервере таким образом?

(Все еще довольно плохо знакомы с переполнением, поэтому, пожалуйста, дайтея знаю, если нужна дополнительная информация)

Спасибо

1 Ответ

0 голосов
/ 27 сентября 2019

Courtest of 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)
...