Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 41ce240

Browse files
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)

AltStyle によって変換されたページ (->オリジナル) /