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

时间:2018-03-19 18:21:31

标签: reporting-services ssrs-2012

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

在SSRS的SQL JOB中,我修改了SQL JOB的第1步。在执行exec 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;

请注意,我们为SSRS添加了30秒的延迟以接收和执行报告。 有没有办法避免随机秒并直接执行报告?或AddEvent是唯一的方法吗?

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

我正在使用SSRS和SQL Server 2012

谢谢你的帮助

1 个答案:

答案 0 :(得分:0)

我对此进行了调整,以解决危险的随机等待时间。 SQL Server中心文章[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

结束