我在 SQL Server 2019 中有一个存储过程,可以按需手动运行 SSRS 订阅。
我正在寻找一种从网页上的按钮或超链接触发其执行的方法。没有什么可以退还的;它只是启动 SSRS 报告以供分发。我查看了不同的脚本解决方案,但大多数都希望返回结果集。
存储过程有一个输入参数,称为:shipment number
类型integer
。
SSRS 订阅有 3 个整数类型参数:shipment number
、current copy
和number of copies
。
后端是用 C# 编写的,并遵循 EF Core CRUD 脚手架结构。存储过程非常简单,它使用SubscriptionID
ReportServer 数据库中的 Subscriptions 表来确定要运行的订阅。可shipment number
作为存储过程参数传递。它是模型中的列,在 CSHTML 代码中定义,在列表中显示 Shipment 表,称为Index.cshtml
.
任何帮助,将不胜感激。
下面是创建存储过程的 SQL 代码:
CREATE PROCEDURE [dbo].[RM_Create_Receipt]
@shipment_number INTEGER
AS
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/*
Update the Stored Procedure
*/
ALTER PROCEDURE [dbo].[RM_Create_Receipt]
@shipment_number INTEGER
AS
/*
Allow for uncommitted reads from the database
*/
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
/*
Suppress the display of row counts
*/
SET NOCOUNT ON
/*
Update the Shipment Number ParameterValue in the Subscriptions table
*/
UPDATE [ReportServer].[dbo].Subscriptions
SET Parameters = '<ParameterValues><ParameterValue><Name>shipment_number</Name><Value>' +
CAST(@shipment_number AS NVARCHAR(6)) +
'</Value></ParameterValue><ParameterValue><Name>CurrentCopy</Name><Value>1</Value></ParameterValue><ParameterValue><Name>Copies</Name><Value>2</Value></ParameterValue></ParameterValues>'
WHERE SubscriptionID = '42B22D8A-C8EF-4DE8-9FBF-68DFD1B760CB'
/*
Run the Report Subscription
*/
EXEC [ReportServer].[dbo].AddEvent
@EventType = 'TimedSubscription',
@EventData = '42B22D8A-C8EF-4DE8-9FBF-68DFD1B760CB'
GO