-2

我在 SQL Server 2019 中有一个存储过程,可以按需手动运行 SSRS 订阅。

我正在寻找一种从网页上的按钮或超链接触发其执行的方法。没有什么可以退还的;它只是启动 SSRS 报告以供分发。我查看了不同的脚本解决方案,但大多数都希望返回结果集。

存储过程有一个输入参数,称为:shipment number类型integer

SSRS 订阅有 3 个整数类型参数:shipment numbercurrent copynumber of copies

后端是用 C# 编写的,并遵循 EF Core CRUD 脚手架结构。存储过程非常简单,它使用SubscriptionIDReportServer 数据库中的 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
4

0 回答 0