我正在创建一个存储过程,从 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 代理作业 和 PowerShell 脚本。确实,它更简单、更强大。从 TSQL 将报告请求写入表,然后调用 sp_start_job 或让计划启动代理作业以呈现所有待处理的报告请求。
如果您想了解如何使用 sp_oaxxx 过程,请参阅此处。
使用 SSRS SOAP API 对于报告导出来说是“严重的过度杀戮”。只需用户URL Access,您只需向 URL 发送单个 HTTP GET 即可获取呈现的报告。