Estoy intentando crear copias de seguridad para todos nuestros informes implementados en el servidor de informes, dado que no tengo muchos permisos, esto está resultando difícil.

Lo primero que probé fue crear una suscripción con XML FILE y Report Data y exportarlo a una carpeta, cuando intento abrir el archivo una vez que está guardado, es solo una parte de lo que el xml estaba en ssrs.

El segundo intento fue obtener el xml directamente del servidor sql, que es la forma en que el diseño debe usar la siguiente consulta

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

El único problema es que no he podido encontrar una manera de guardar automáticamente las porciones xml en un archivo separado que podamos usar para la copia de seguridad, ya que queremos hacer una copia de seguridad de nuestros informes todos los meses.

¿Existe alguna forma de guardar todos nuestros informes en el servidor de esta manera?

(Todavía es bastante nuevo en Overflow, así que avíseme si se necesita más información)

Gracias

0
Aamert 25 sep. 2019 a las 18:41

1 respuesta

La mejor respuesta

Cortesía de bretstateham.com (acabo de probar y funciona):

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)
0
GandRalph 27 sep. 2019 a las 10:21