Bulk Update SSRS Subscription Information
I have a current client who needed to update information in every SSRS Subscription on their production server. The main reason was they were moving domains. This meant updating user names and pointing the subscriptions to a new file share server where it saves reports. This is a standalone instance of SQL Server 2008 R2 Reporting Services, not in SharePoint integrated mode. It finally dawned on me that there is no bulk management tool for SSRS reports or subscriptions. So until I get time to learn VB.net and build a tool we needed a quick way to view and edit all of these subscription properties.
Messing around in the Report Server database can hose your system. So take these steps first:
1. Make a backup of your ReportServer_SSRS database and ReportServer_SSRSTemp.
2. Test the Backup.
3. Try this on a development server first.
List the SSRS Subscriptions
To view all the subscriptions, it is as easy as running a quick query:
c.Name AS ReportName
, c.Description AS ReportDescription
, u.UserName AS ReportCreatedBy
, s.Description AS SubscriptionDescription
, s.DeliveryExtension AS SubscriptionDelivery
, su.UserName AS SubscriptionOwner
,sch.StartDate AS ScheduleStarted
,sch.LastRunTime AS LastSubRun
, d.Name AS DataSource
LEFT OUTER JOIN Subscriptions s ON c.ItemID = s.Report_OID
INNER JOIN DataSource d ON c.ItemID = d.ItemID
LEFT OUTER JOIN Users u ON u.UserID = c.CreatedByID
LEFT OUTER JOIN ReportSchedule rs ON c.ItemID = rs.ReportID
LEFT OUTER JOIN Schedule sch ON rs.ScheduleID = sch.ScheduleID
LEFT OUTER JOIN Users su on s.ownerID = su.UserID
c.Type = 2
and s.SubscriptionID is not null
ORDER BY c.Name
Once we had this list, we were able to change the where clause to narrow it down based on delivery methods.
Update SSRS Subscription Owner
If you need to update the Owner of the subscriptions, there is a good blog article here by Jeremiah Clark. His query, shown below got me working on other methods to help replace the server file share path:
DECLARE @OldUserID uniqueidentifier
DECLARE @NewUserID uniqueidentifier
SELECT @OldUserID = UserID FROM dbo.Users WHERE UserName = 'DOMAINA\OldUser'
SELECT @NewUserID = UserID FROM dbo.Users WHERE UserName = 'DOMAINB\NewUser'
UPDATE dbo.Subscriptions SET OwnerID = @NewUserID WHERE OwnerID = @OldUserID
Now that the ownership has been changed, it is an easy query to update the fileshare paths:
WHERE DeliveryExtension = 'Report Server FileShare'