11/* ------------------------------------------------------------------------------+
22| Purpose: How to Update the owner of deployed reports and subscriptions
33| Note: SQLCmdMode Script
4+ | Reference: http://www.andrewjbillings.com/ssrs-migration-subscriptions-dont-work-if-owner-no-longer-exists/
45+--------------------------------------------------------------------------------
56:setvar _server "Server1"
67:setvar _user "***username***"
1718SET XACT_ABORT ON
1819BEGIN TRANSACTION
1920
20- PRINT ' ====================================================================='
21- PRINT ' Find subscriptions for user...'
22- PRINT ' ====================================================================='
23-
24- ;WITH
25- user_list
26- AS
27- (
28- SELECT UserID, UserName FROM dbo .Users WHERE UserName = N ' $(OldUser)'
29- )
30- -- SELECT 'BEFORE', * FROM user_list
31- SELECT
32- ' BEFORE'
33- , ul .UserName
34- , sb.*
35- FROM
36- dbo .Subscriptions sb
37- INNER JOIN user_list ul ON sb .OwnerID = ul .UserID
38-
3921PRINT ' ====================================================================='
4022PRINT ' Update subscriptions...'
4123PRINT ' ====================================================================='
4224
4325;WITH
44- user_old
45- AS
46- (
47- SELECT Old_UserID = UserID, UserName FROM dbo .Users WHERE UserName = N ' $(OldUser)'
48- )
49- ,
50- user_new
51- AS
52- (
53- SELECT New_UserID = UserID, UserName FROM dbo .Users WHERE UserName = N ' $(NewUser)'
54- )
55- -- SELECT
56- -- uo.UserName
57- -- , un.UserName
58- UPDATE
59- dbo .Subscriptions
60- SET
61- OwnerID = un .New_UserID
62- FROM
63- dbo .Subscriptions sb
64- INNER JOIN user_old uo ON sb .OwnerID = uo .Old_UserID
65- , user_new un
66-
67- PRINT ' ====================================================================='
68- PRINT ' Update reports...'
69- PRINT ' ====================================================================='
70-
71- ;WITH
72- user_old
73- AS
74- (
75- SELECT Old_UserID = UserID, UserName FROM dbo .Users WHERE UserName = N ' $(OldUser)'
76- )
77- ,
78- user_new
79- AS
80- (
81- SELECT New_UserID = UserID, UserName FROM dbo .Users WHERE UserName = N ' $(NewUser)'
82- )
83- UPDATE
84- dbo .Catalog
85- SET
86- CreatedById = un .New_UserID
87- FROM
88- dbo .Catalog AS c
89- INNER JOIN user_old uo ON c .CreatedById = uo .Old_UserID
90- , user_new un
91- -- WHERE c.Type = 2
92-
93- ;WITH
94- user_old
26+ new_owner
9527AS
9628(
97- SELECT Old_UserID = UserID, UserName FROM dbo .Users WHERE UserName = N ' $(OldUser )'
29+ SELECT UserID, UserName FROM dbo .Users WHERE UserName = N ' $(NewUser )'
9830)
9931,
100- user_new
32+ subscription_source
10133AS
10234(
103- SELECT New_UserID = UserID, UserName FROM dbo .Users WHERE UserName = N ' $(NewUser)'
35+ SELECT DISTINCT
36+ s.[Report_OID]
37+ , [OldOwner] = ou .UserName
38+ , [OldOwnerID] = ou .UserID
39+ , [NewOwner] = nu .UserName
40+ , [NewOwnerID] = nu .UserID
41+ FROM
42+ dbo .Subscriptions AS s
43+ INNER JOIN dbo .Users AS ou ON ou.[UserID] = s.[OwnerID]
44+ , new_owner AS nu
45+ WHERE
46+ 1 = 1
47+ AND ou.[UserName] = N ' $(OldUser)'
10448)
105- UPDATE
106- dbo .Catalog
107- SET
108- ModifiedById = un .New_UserID
109- FROM
110- dbo .Catalog AS c
111- INNER JOIN user_old uo ON c .ModifiedById = uo .Old_UserID
112- , user_new un
113- -- WHERE c.Type = 2
49+ -- SELECT * FROM subscription_source
50+ MERGE dbo .Subscriptions AS T
51+ USING subscription_source AS S ON T.[Report_OID] = S.[Report_OID]
52+ WHEN MATCHED
53+ THEN UPDATE SET
54+ T.[OwnerID] = S.[NewOwnerID]
55+ OUTPUT @@ServerName AS ServerName, db_name () AS DatabaseName, $action , inserted.* , deleted.* ;
11456
115- ;WITH
116- user_old
117- AS
118- (
119- SELECT Old_UserID = UserID, UserName FROM dbo .Users WHERE UserName = N ' $(OldUser)'
120- )
121- ,
122- user_new
123- AS
124- (
125- SELECT New_UserID = UserID, UserName FROM dbo .Users WHERE UserName = N ' $(NewUser)'
126- )
127- SELECT
128- c .CreatedById
129- , c .ModifiedById
130- , uo .UserName
131- , un .UserName
132- , c.*
133- FROM
134- dbo .Catalog AS c
135- INNER JOIN user_old uo ON c .CreatedById = uo .Old_UserID
136- , user_new un
13757
138- PRINT ' ====================================================================='
139- PRINT ' Find OLD subscriptions for user...'
140- PRINT ' ====================================================================='
58+ PRINT ' ******* ROLLBACK TRANSACTION ******* ' ;
59+ ROLLBACK TRANSACTION ;
14160
142- ;WITH
143- user_list
144- AS
145- (
146- SELECT UserID, UserName FROM dbo .Users WHERE UserName = N ' $(OldUser)'
147- )
148- -- SELECT 'BEFORE', * FROM user_list
149- SELECT
150- ' AFTER'
151- , ul .UserName
152- , sb.*
153- FROM
154- dbo .Subscriptions sb
155- INNER JOIN user_list ul ON sb .OwnerID = ul .UserID
156-
157- PRINT ' ====================================================================='
158- PRINT ' Find NEW subscriptions for user...'
159- PRINT ' ====================================================================='
160-
161- ;WITH
162- user_list
163- AS
164- (
165- SELECT UserID, UserName FROM dbo .Users WHERE UserName = N ' $(NewUser)'
166- )
167- -- SELECT 'BEFORE', * FROM user_list
168- SELECT
169- ' AFTER'
170- , ul .UserName
171- , sb.*
172- FROM
173- dbo .Subscriptions sb
174- INNER JOIN user_list ul ON sb .OwnerID = ul .UserID
175-
176-
177- ROLLBACK TRANSACTION
178- -- COMMIT TRANSACTION
61+ -- PRINT '******* COMMIT TRANSACTION ******* ';
62+ -- COMMIT TRANSACTION;
17963
18064PRINT ' ====================================================================='
18165PRINT ' Finished...'
182- PRINT ' ====================================================================='
66+ PRINT ' ====================================================================='
0 commit comments