Is it possible to import existing SSRS reports in Visual Studio?

后端 未结 2 685
执笔经年
执笔经年 2021-01-11 17:05

When upgrading a machine, we lost the Visual Studio project that was used to create SSRS reports. The Data Sources and the Reports still exist on the server however. Is ther

2条回答
  •  隐瞒了意图╮
    2021-01-11 17:41

    SSRS doesn't allow you to download all reports from a report folder in 1 go...

    However I found and tweaked a simple piece of SQL I found on the net which we use to great effect on our system...

    This is it:-

    /*
    People working on SSRS are well aware that “Report Manager” does not support downloading all the report files (.rdl files) at one go out-of-box.
    However take this script, alter the xxx parameters to your bits. Its works great.
    If you get a HOST Error - you need to set full permission to the SQL Server Group on your DOS Dir. 
    on [Our_Prod_Server], this is: SQLServerMSSQLUser$NS226758$MSSQLSERVER
    
    NOTE: You will find a RETURN; statement below, comment it out once you have altered the parameters.
    */
    
    --Replace NULL with keywords of the ReportManager's Report Path,  
    --if reports from any specific path are to be downloaded 
    --select * from [ReportServer].[dbo].[Catalog] CL -- this gives you an idea of the Report Directories.
    DECLARE @FilterReportPath AS VARCHAR(500) = 'xxx'  
    
    --Replace NULL with the keyword matching the Report File Name, 
    --if any specific reports are to be downloaded 
    DECLARE @FilterReportName AS VARCHAR(500) = '' 
    
    --Replace this path with the Server Location where you want the 
    --reports to be downloaded.. 
    DECLARE @OutputPath AS VARCHAR(500) = 'C:\Users\[uuuuu]\Documents\Visual Studio 2012\Projects\Report Skeleton\[Report DIR Name]\' 
    
    --Used to prepare the dynamic query 
    DECLARE @TSQL AS NVARCHAR(MAX) 
    
    RETURN;
    
    --Reset the OutputPath separator. 
    SET @OutputPath = REPLACE(@OutputPath,'\','/') 
    
    --Simple validation of OutputPath; this can be changed as per ones need. 
    IF LTRIM(RTRIM(ISNULL(@OutputPath,''))) = '' 
    BEGIN 
      SELECT 'Invalid Output Path' 
    END 
    ELSE 
    BEGIN 
       --Prepare the query for download. 
       /* 
       Please note the following points - 
       1. The BCP command could be modified as per ones need. E.g. Providing UserName/Password, etc. 
       2. Please update the SSRS Report Database name. Currently, it is set to default - [ReportServer] 
       3. The BCP does not create missing Directories. So, additional logic could be implemented to handle that. 
       4. SSRS stores the XML items (Report RDL and Data Source definitions) using the UTF-8 encoding.  
          It just so happens that UTF-8 Unicode strings do not NEED to have a BOM and in fact ideally would not have one.  
          However, you will see some report items in your SSRS that begin with a specific sequence of bytes (0xEFBBBF).  
          That sequence is the UTF-8 Byte Order Mark. It’s character representation is the following three characters, “”.  
          While it is supported, it can cause problems with the conversion to XML, so it is removed. 
       */ 
       SET @TSQL = STUFF((SELECT 
                          ';EXEC master..xp_cmdshell ''bcp " ' + 
                          ' SELECT ' + 
                          ' CONVERT(VARCHAR(MAX), ' + 
                          '       CASE ' + 
                          '         WHEN LEFT(C.Content,3) = 0xEFBBBF THEN STUFF(C.Content,1,3,'''''''') '+ 
                          '         ELSE C.Content '+ 
                          '       END) ' + 
                          ' FROM ' + 
                          ' [ReportServer].[dbo].[Catalog] CL ' + 
                          ' CROSS APPLY (SELECT CONVERT(VARBINARY(MAX),CL.Content) Content) C ' + 
                          ' WHERE ' + 
                          ' CL.ItemID = ''''' + CONVERT(VARCHAR(MAX), CL.ItemID) + ''''' " queryout "' + @OutputPath + '' + CL.Name + '.rdl" ' + '-T -c -x''' 
                        FROM 
                          [ReportServer].[dbo].[Catalog] CL 
                        WHERE 
                          CL.[Type] = 2 --Report 
                          AND '/' + CL.[Path] + '/' LIKE COALESCE('%/%' + @FilterReportPath + '%/%', '/' + CL.[Path] + '/') 
                          AND CL.Name LIKE COALESCE('%' + @FilterReportName + '%', CL.Name) 
                        FOR XML PATH('')), 1,1,'') 
    
      --SELECT @TSQL 
    
      --Execute the Dynamic Query 
      EXEC SP_EXECUTESQL @TSQL 
    END
    

提交回复
热议问题