|
7 | 7 |
|
8 | 8 | ALTER PROCEDURE dbo.sp_foreachdb
|
9 | 9 | -- Original fields from sp_MSforeachdb...
|
10 | | - @command1 NVARCHAR(MAX) , |
| 10 | + @command1 NVARCHAR(MAX) =NULL, |
11 | 11 | @replacechar NCHAR(1) = N'?' ,
|
12 | 12 | @command2 NVARCHAR(MAX) = NULL ,
|
13 | 13 | @command3 NVARCHAR(MAX) = NULL ,
|
14 | 14 | @precommand NVARCHAR(MAX) = NULL ,
|
15 | 15 | @postcommand NVARCHAR(MAX) = NULL ,
|
16 | 16 | -- Additional fields for our sp_foreachdb!
|
| 17 | + @command NVARCHAR(MAX) = NULL, --For backwards compatibility |
17 | 18 | @print_dbname BIT = 0 ,
|
18 | 19 | @print_command_only BIT = 0 ,
|
19 | 20 | @suppress_quotename BIT = 0 ,
|
|
37 | 38 | SET @Version = '2.0';
|
38 | 39 | SET @VersionDate = '20171201';
|
39 | 40 |
|
| 41 | + IF ( (@command1 IS NOT NULL AND @command IS NOT NULL) |
| 42 | + OR (@command1 IS NULL AND @command IS NULL) ) |
| 43 | + BEGIN |
| 44 | + RAISERROR('You must supply either @command1 or @command, but not both.',16,1); |
| 45 | + RETURN -1; |
| 46 | + END; |
| 47 | + |
| 48 | + SET @command1 = COALESCE(@command1,@command); |
40 | 49 |
|
41 | 50 | DECLARE @sql NVARCHAR(MAX) ,
|
42 | 51 | @dblist NVARCHAR(MAX) ,
|
|
104 | 113 |
|
105 | 114 | CREATE TABLE #x ( db NVARCHAR(300) );
|
106 | 115 |
|
107 | | - SET @sql = N'SELECT name FROM sys.databases WHERE 1=1' |
108 | | - + CASE WHEN @system_only = 1 THEN ' AND database_id IN (1,2,3,4)' |
| 116 | + SET @sql = N'SELECT name FROM sys.databases d WHERE 1=1' |
| 117 | + + CASE WHEN @system_only = 1 THEN ' AND d.database_id IN (1,2,3,4)' |
109 | 118 | ELSE ''
|
110 | 119 | END
|
111 | 120 | + CASE WHEN @user_only = 1
|
112 | | - THEN ' AND database_id NOT IN (1,2,3,4)' |
| 121 | + THEN ' AND d.database_id NOT IN (1,2,3,4)' |
113 | 122 | ELSE ''
|
114 | 123 | END
|
115 | 124 | -- To exclude databases from changes
|
116 | 125 | + CASE WHEN @exlist IS NOT NULL
|
117 | | - THEN ' AND name NOT IN (' + @exlist + ')' |
| 126 | + THEN ' AND d.name NOT IN (' + @exlist + ')' |
118 | 127 | ELSE ''
|
119 | 128 | END + CASE WHEN @name_pattern <> N'%'
|
120 | | - THEN ' AND name LIKE N''' + REPLACE(@name_pattern, |
| 129 | + THEN ' AND d.name LIKE N''' + REPLACE(@name_pattern, |
121 | 130 | '''', '''''')
|
122 | 131 | + ''''
|
123 | 132 | ELSE ''
|
124 | 133 | END + CASE WHEN @dblist IS NOT NULL
|
125 | | - THEN ' AND name IN (' + @dblist + ')' |
| 134 | + THEN ' AND d.name IN (' + @dblist + ')' |
126 | 135 | ELSE ''
|
127 | 136 | END
|
128 | 137 | + CASE WHEN @recovery_model_desc IS NOT NULL
|
129 | | - THEN ' AND recovery_model_desc = N''' |
| 138 | + THEN ' AND d.recovery_model_desc = N''' |
130 | 139 | + @recovery_model_desc + ''''
|
131 | 140 | ELSE ''
|
132 | 141 | END
|
133 | 142 | + CASE WHEN @compatibility_level IS NOT NULL
|
134 | | - THEN ' AND compatibility_level = ' |
| 143 | + THEN ' AND d.compatibility_level = ' |
135 | 144 | + RTRIM(@compatibility_level)
|
136 | 145 | ELSE ''
|
137 | 146 | END
|
138 | 147 | + CASE WHEN @state_desc IS NOT NULL
|
139 | | - THEN ' AND state_desc = N''' + @state_desc + '''' |
| 148 | + THEN ' AND d.state_desc = N''' + @state_desc + '''' |
140 | 149 | ELSE ''
|
141 | 150 | END
|
| 151 | + + CASE WHEN @state_desc = 'ONLINE' AND SERVERPROPERTY('IsHadrEnabled') = 1 |
| 152 | + THEN ' AND NOT EXISTS (SELECT 1 |
| 153 | + FROM sys.dm_hadr_database_replica_states drs |
| 154 | + JOIN sys.availability_replicas ar |
| 155 | + ON ar.replica_id = drs.replica_id |
| 156 | + JOIN sys.dm_hadr_availability_group_states ags |
| 157 | + ON ags.group_id = ar.group_id |
| 158 | + WHERE drs.database_id = d.database_id |
| 159 | + AND ar.secondary_role_allow_connections = 0 |
| 160 | + AND ags.primary_replica <> @@SERVERNAME)' |
| 161 | + ELSE '' |
| 162 | + END |
142 | 163 | + CASE WHEN @is_read_only IS NOT NULL
|
143 | | - THEN ' AND is_read_only = ' + RTRIM(@is_read_only) |
| 164 | + THEN ' AND d.is_read_only = ' + RTRIM(@is_read_only) |
144 | 165 | ELSE ''
|
145 | 166 | END
|
146 | 167 | + CASE WHEN @is_auto_close_on IS NOT NULL
|
147 | | - THEN ' AND is_auto_close_on = ' + RTRIM(@is_auto_close_on) |
| 168 | + THEN ' AND d.is_auto_close_on = ' + RTRIM(@is_auto_close_on) |
148 | 169 | ELSE ''
|
149 | 170 | END
|
150 | 171 | + CASE WHEN @is_auto_shrink_on IS NOT NULL
|
151 | | - THEN ' AND is_auto_shrink_on = ' + RTRIM(@is_auto_shrink_on) |
| 172 | + THEN ' AND d.is_auto_shrink_on = ' + RTRIM(@is_auto_shrink_on) |
152 | 173 | ELSE ''
|
153 | 174 | END
|
154 | 175 | + CASE WHEN @is_broker_enabled IS NOT NULL
|
155 | | - THEN ' AND is_broker_enabled = ' + RTRIM(@is_broker_enabled) |
| 176 | + THEN ' AND d.is_broker_enabled = ' + RTRIM(@is_broker_enabled) |
156 | 177 | ELSE ''
|
157 | 178 | END;
|
158 | 179 |
|
|
0 commit comments