【发布时间】:2015-12-04 20:49:40
【问题描述】:
我们正在使用 SSRS 报告来查看数据。我们有与基于 SQL 的报告相关联的订阅 扳机。此触发器更新订阅表并动态更改订阅者的参数 电子邮件正在发送到。但是,如果触发器在一次的 4 秒内执行两次,这可以正常工作 然后最后一个电子邮件收件人收到第一个订阅的报告和第二个。
问题是,两个不同的电子邮件收件人如何获得自己的订阅报告 如果触发器在 4 秒内执行了两次?
4 秒后,第一个收件人收到他的电子邮件,第二个收件人收到他的电子邮件,一切都很好。
似乎存在一个瓶颈,多个用户可能会更新订阅表中的一行,这可能会导致潜在问题。
有没有办法使用 sql 脚本创建订阅并将参数传递给报告的存储过程 服务器用于创建新订阅或预定订阅?
我的代码粘贴在下面,显示一旦表中的值(EmployeeTimeSheets)被更新,触发器就会执行,将插入的 订阅参数部分的 ID(员工)。
有没有办法在 sql server 中动态构建报表服务器订阅? 非常感谢任何帮助。
declare @WkEnd nvarchar(30);
declare @Employee nvarchar(50);
declare @UserName nvarchar(30);
declare @TimeStamp datetime;
declare @Title nvarchar(30);
declare @CompleteTS nvarchar(15);
/* If no email is sent to the email afer testing this trigger then that means its past 2pm on Monday.*/
IF (UPDATE(SelfReport))
BEGIN
set @WkEnd=(Select distinct i.[WkEnd] FROM inserted i INNER JOIN deleted AS d ON i.EmpId = d.EmpId)
set @Employee=(Select distinct e.[Employee] FROM inserted i inner join deleted d on i.empid=d.empid inner join employees e on i.empid=e.rowid)
set @UserName=(Select distinct e.[UserName] FROM inserted i inner join deleted d on i.empid=d.empid inner join employees e on i.empid=e.rowid)
set @Title=(Select distinct e.[Title] FROM inserted i inner join deleted d on i.empid=d.empid inner join employees e on i.empid=e.rowid)
update ReportServer.dbo.Subscriptions
set [Parameters]='<ParameterValues>
<ParameterValue><Name>WeekEnding</Name><Value>'+@WkEnd+'</Value></ParameterValue>
<ParameterValue><Name>SelecDepartment</Name><Value>'+@Title+'</Value></ParameterValue>
<ParameterValue><Name>SelectEmployee</Name><Value>'+@Employee+'</Value></ParameterValue></ParameterValues>',
[ExtensionSettings]= '<ParameterValues>
<ParameterValue><Name>TO</Name><Value>'+@UserName+'@processsolutions.com</Value></ParameterValue>
<ParameterValue><Name>IncludeReport</Name><Value>True</Value></ParameterValue>
<ParameterValue><Name>RenderFormat</Name><Value>PDF</Value></ParameterValue>
<ParameterValue><Name>Subject</Name><Value>Completed TimeSheet From '+@Employee+'</Value></ParameterValue>
<ParameterValue><Name>IncludeLink</Name><Value>False</Value></ParameterValue>
<ParameterValue><Name>Priority</Name><Value>NORMAL</Value></ParameterValue>
<ParameterValue><Name>Comment</Name><Value>TimeSheet Completion: ' +@Employee+ ' ' +@WkEnd+ '</Value></ParameterValue>
</ParameterValues>'
where SubscriptionID='530f3da4-a6b5-4594-aa6b-3bfd638600d3'
EXEC ReportServer.dbo.AddEvent @EventType='TimedSubscription',
@EventData='530f3da4-a6b5-4594-aa6b-3bfd638600d3'
END
【问题讨论】:
标签: sql-server reporting-services