通过存储过程从 SSRS 打印报告

问题描述 投票:0回答:1

我正在创建一个存储过程,从 SSRS 报告服务器导出 pdf 报告。该报告需要一个名为“ExportId”的参数。该过程成功运行,但未创建 pdf。我在这里做错了什么?


Alter PROCEDURE rsp_GenerateAndDeliverReports
    @ReportName NVARCHAR(100),
    @Parameter1Name NVARCHAR(100),
    @Parameter1Value NVARCHAR(100),
    @OutputFile NVARCHAR(100)
AS
BEGIN
    -- Variables
    DECLARE @executionID AS INT
    DECLARE @reportBytes AS VARBINARY(MAX)
    DECLARE @zipFilePath AS NVARCHAR(100)
    DECLARE @reportService AS INT -- Change the data type to INT

    -- Create an instance of the SSRS Execution Service
    EXEC sp_OACreate 'SSRS.ReportExecutionService', @reportService OUT

    -- Initialize the service
    EXEC sp_OASetProperty @reportService, 'Url', 'http://localhost/ReportServer/ReportExecution2005.asmx'

    -- Load Report 1
    EXEC sp_OAMethod @reportService, 'LoadReport', NULL, @ReportName, NULL, @executionID OUT

    -- Set Report 1 Parameters
    EXEC sp_OAMethod @reportService, 'SetExecutionParameters', NULL, @Parameter1Name, @Parameter1Value

    -- Render Report 1
    EXEC sp_OAMethod @reportService, 'Render', @reportBytes OUTPUT, 'PDF', NULL, NULL, NULL, NULL, NULL

    -- Close and release the service
    EXEC sp_OADestroy @reportService





    -- Save Report 1 as PDF
    DECLARE @sql NVARCHAR(MAX)
    SET @sql = 'DECLARE @file AS VARBINARY(MAX) 
                SET @file = ' + CONVERT(NVARCHAR(MAX), @reportBytes, 1) + '
                EXEC sp_writebytesfile @file, ''' + @OutputFile + ''
    EXEC sp_executesql @sql

END


EXEC rsp_GenerateAndDeliverReports @ReportName='/All Reports/Subreports/07_sub', @Parameter1Name ='ExportId', @Parameter1Value='2', @OutputFile='C:\Users\Public\Public Downloads\Report.pdf'


sql sql-server t-sql reporting-services
1个回答
0
投票

请使用 SQL 代理作业 和 PowerShell 脚本。确实,它更简单、更强大。从 TSQL 将报告请求写入表,然后调用 sp_start_job 或让计划启动代理作业以呈现所有待处理的报告请求。

如果您想了解如何使用 sp_oaxxx 过程,请参阅此处

使用 SSRS SOAP API 对于报告导出来说是“严重的过度杀戮”。只需用户URL Access,您只需向 URL 发送单个 HTTP GET 即可获取呈现的报告。

© www.soinside.com 2019 - 2024. All rights reserved.