0

我是一个全新的初级 SQL 开发人员。我继承了报告管理器上的几个报告。其中一些似乎设置了订阅,但它们包含无效的电子邮件地址。

我了解我可以通过报告管理器一次修改每个报告及其订阅,方法是单击报告、转到管理、订阅等;然而,这似乎是对时间和精力的巨大浪费,而且它并没有为未来提供非常可靠的解决方案。

我宁愿把时间花在更有意义的事情上。有什么方法可以让我从 SSMS 访问我的所有 Report Manager 报告订阅?我希望能够查看他们现在硬编码到哪些电子邮件地址,然后对其进行修改以从我们人力资源数据库中的员工电子邮件列表中进行选择。这样,如果电子邮件稍后发生更改,或者我们想从所有订阅中删除一个人,则不会花费大量时间。

另外,有谁知道如何避免报表管理器似乎附带的荒谬的工作命名约定?我不知道报告“3AC1BB6F-D782-46DD-99F5-CCA1E6257091”与什么相关,但如果可以将其修改为默认为“ReportName+Microsoft'sTypicalBSNamingCovention”之类的东西,那很好,并且会做一些感觉。

我希望这是有道理的。提前感谢大家与我分享您的经验和知识。:^)

4

1 回答 1

3

这是一个允许您查看订阅的查询,当然前提是您知道报表服务器数据库的位置。

SELECT A.SubscriptionID, A.Report_OID, B.Name, 
Path, A.LastRunTime, A.Description, C.UserName AS Owner, A.LastStatus, A.ExtensionSettings
FROM Subscriptions A INNER JOIN Catalog B
ON A.Report_OID = B.ItemID
INNER JOIN Users C
ON A.OwnerID = C.UserID
WHERE A.ExtensionSettings LIKE '%name@domain.com%' -- this can be more than an email, like a paramater value
ORDER BY A.LastRunTime DESC

这是一个可用于更新订阅的查询。

UPDATE Subscriptions SET
ExtensionSettings = REPLACE(CAST(ExtensionSettings AS nvarchar(max)), 'name', 'new_name')
WHERE ExtensionSettings LIKE '%name@domain.com%'

谨慎使用更新,否则您最终可能会手动重建订阅。

不要乱用 Report Manager 创建的订阅作业。如果您需要查找特定订阅的作业,只需尝试确保每个订阅都有一个独特的时间表。按上次运行日期对作业列表进行排序,以查找上次触发订阅的时间。右键运行。无论如何,这对我来说已经足够好了。

于 2016-06-10T15:33:02.797 回答