Skip to content

Commit 41ce240

Browse files
authored
Merge pull request BrentOzarULTD#1320 from amtwo/issue1318/amtwo
Issue1318/amtwo
2 parents 7dc65dc + 8e173ea commit 41ce240

File tree

1 file changed

+35
-14
lines changed

1 file changed

+35
-14
lines changed

sp_foreachdb.sql

Lines changed: 35 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,14 @@ GO
77

88
ALTER PROCEDURE dbo.sp_foreachdb
99
-- Original fields from sp_MSforeachdb...
10-
@command1 NVARCHAR(MAX) ,
10+
@command1 NVARCHAR(MAX) = NULL,
1111
@replacechar NCHAR(1) = N'?' ,
1212
@command2 NVARCHAR(MAX) = NULL ,
1313
@command3 NVARCHAR(MAX) = NULL ,
1414
@precommand NVARCHAR(MAX) = NULL ,
1515
@postcommand NVARCHAR(MAX) = NULL ,
1616
-- Additional fields for our sp_foreachdb!
17+
@command NVARCHAR(MAX) = NULL, --For backwards compatibility
1718
@print_dbname BIT = 0 ,
1819
@print_command_only BIT = 0 ,
1920
@suppress_quotename BIT = 0 ,
@@ -37,6 +38,14 @@ AS
3738
SET @Version = '2.0';
3839
SET @VersionDate = '20171201';
3940

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);
4049

4150
DECLARE @sql NVARCHAR(MAX) ,
4251
@dblist NVARCHAR(MAX) ,
@@ -104,55 +113,67 @@ AS
104113

105114
CREATE TABLE #x ( db NVARCHAR(300) );
106115

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)'
109118
ELSE ''
110119
END
111120
+ 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)'
113122
ELSE ''
114123
END
115124
-- To exclude databases from changes
116125
+ CASE WHEN @exlist IS NOT NULL
117-
THEN ' AND name NOT IN (' + @exlist + ')'
126+
THEN ' AND d.name NOT IN (' + @exlist + ')'
118127
ELSE ''
119128
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,
121130
'''', '''''')
122131
+ ''''
123132
ELSE ''
124133
END + CASE WHEN @dblist IS NOT NULL
125-
THEN ' AND name IN (' + @dblist + ')'
134+
THEN ' AND d.name IN (' + @dblist + ')'
126135
ELSE ''
127136
END
128137
+ CASE WHEN @recovery_model_desc IS NOT NULL
129-
THEN ' AND recovery_model_desc = N'''
138+
THEN ' AND d.recovery_model_desc = N'''
130139
+ @recovery_model_desc + ''''
131140
ELSE ''
132141
END
133142
+ CASE WHEN @compatibility_level IS NOT NULL
134-
THEN ' AND compatibility_level = '
143+
THEN ' AND d.compatibility_level = '
135144
+ RTRIM(@compatibility_level)
136145
ELSE ''
137146
END
138147
+ CASE WHEN @state_desc IS NOT NULL
139-
THEN ' AND state_desc = N''' + @state_desc + ''''
148+
THEN ' AND d.state_desc = N''' + @state_desc + ''''
140149
ELSE ''
141150
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
142163
+ 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)
144165
ELSE ''
145166
END
146167
+ 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)
148169
ELSE ''
149170
END
150171
+ 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)
152173
ELSE ''
153174
END
154175
+ 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)
156177
ELSE ''
157178
END;
158179

0 commit comments

Comments
 (0)