SSRS 添加事件数据并手动更新 SSRS 参数

SSRS add event data and manually updating SSRS Parameter

我不确定这是否是最好的方法,但它对我有用。唯一的缺点是我需要添加随机秒数的延迟才能使用当前参数。 请看下面我的代码。

在SSRS的SQL JOB中,我修改了SQL JOB的第1步。在执行 addevent 之前,我更新参数值。

    declare @xml as xml
    set quoted_identifier ON
    DECLARE db_cursor CURSOR FOR 
    SELECT C.[City]
    FROM #FService C
    GROUP BY C.[City]
    ORDER BY C.[City]
    DECLARE @CityLoop VARCHAR(50);
    OPEN db_cursor;
    FETCH NEXT FROM db_cursor INTO @CityLoop;
    WHILE @@FETCH_STATUS = 0  
BEGIN  
    -- THIS IS TO UPDATE XML
    set @xml = (select  Parameters 
    from ReportServer.dbo.Subscriptions sb
    where sb.SubscriptionID = 'GUID')
       set @xml.modify('    replace value of 
       (/ParameterValues/ParameterValue[2]/Value/text())[1]    with    
       sql:variable("@CityLoop")  ')

    -- HERE WE UPDATE PARAMETER TABLE
    update ReportServer.dbo.Subscriptions 
    set parameters = convert(nvarchar(max), @xml)
    where SubscriptionID = 'GUID'

    -- HERE IS THE ORIGINAL EXEC
    exec [ReportServer].dbo.AddEvent @EventType='TimedSubscription', @EventData='GUID'

    WAITFOR DELAY '00:00:30';

    --RAISERROR (@DealLoop, 0, 1) WITH NOWAIT 

    FETCH NEXT FROM db_cursor INTO @CityLoop;
END;
CLOSE db_cursor;
DEALLOCATE db_cursor;

请注意,我们添加了 30 秒的延迟,以便 SSRS 获取并执行报告。 有没有办法避免随机秒并直接执行报告?或者 AddEvent 是执行此操作的唯一方法?

如果我没有延迟,报告将只运行 使用最后一个@cityLoop 参数。这就是为什么我添加延迟然后通过每 30 秒为参数查询中可用的每个城市发送电子邮件来正常工作的原因

我正在使用 SSRS 和 SQL Server 2012

感谢您的帮助

我对此进行了调整,以解决有风险的随机等待时间。 SQL服务器中心文章[https://www.sqlservercentral.com/articles/dynamically-name-reportfile-export-in-ssrs]

基本上就是等待执行

            -- WAIT for EXECUTION
        set @bool1 = ISNULL((select eventdata from event where eventdata = @SBidEventData), '') 
        while  @bool1 <> ''
        begin 
            set @bool1 = ISNULL((select eventdata from event where eventdata = @SBidEventData), '') 
            if  @bool1 = '' 
            begin 
                -- SET PATH AND PARAMETER TO THE WAY IT WAS
                WAITFOR DELAY '000:00:07'
                update Catalog 
                set Path = '/Report/Report1'
                where ItemID = @ItemID
                update Subscriptions
                set Parameters = '<ParameterValues><ParameterValue><Name>Year</Name><Value>2019</Value></ParameterValue><ParameterValue><Name>Category</Name><Value>HONDA</Value></ParameterValue><ParameterValue><Name>Month</Name><Value>12</Value></ParameterValue></ParameterValues>'
                where SubscriptionID = @SBidEventData
            end

结束