@@ -32543,13 +32543,14 @@ GO
3254332543
3254432544ALTER PROCEDURE dbo.sp_foreachdb
3254532545 -- Original fields from sp_MSforeachdb...
32546- @command1 NVARCHAR(MAX) ,
32546+ @command1 NVARCHAR(MAX) = NULL ,
3254732547 @replacechar NCHAR(1) = N'?' ,
3254832548 @command2 NVARCHAR(MAX) = NULL ,
3254932549 @command3 NVARCHAR(MAX) = NULL ,
3255032550 @precommand NVARCHAR(MAX) = NULL ,
3255132551 @postcommand NVARCHAR(MAX) = NULL ,
3255232552 -- Additional fields for our sp_foreachdb!
32553+ @command NVARCHAR(MAX) = NULL, --For backwards compatibility
3255332554 @print_dbname BIT = 0 ,
3255432555 @print_command_only BIT = 0 ,
3255532556 @suppress_quotename BIT = 0 ,
@@ -32573,6 +32574,14 @@ AS
3257332574 SET @Version = '2.0';
3257432575 SET @VersionDate = '20171201';
3257532576
32577+ IF ( (@command1 IS NOT NULL AND @command IS NOT NULL)
32578+ OR (@command1 IS NULL AND @command IS NULL) )
32579+ BEGIN
32580+ RAISERROR('You must supply either @command1 or @command, but not both.',16,1);
32581+ RETURN -1;
32582+ END;
32583+
32584+ SET @command1 = COALESCE(@command1,@command);
3257632585
3257732586 DECLARE @sql NVARCHAR(MAX) ,
3257832587 @dblist NVARCHAR(MAX) ,
@@ -32640,55 +32649,67 @@ AS
3264032649
3264132650 CREATE TABLE #x ( db NVARCHAR(300) );
3264232651
32643- SET @sql = N'SELECT name FROM sys.databases WHERE 1=1'
32644- + CASE WHEN @system_only = 1 THEN ' AND database_id IN (1,2,3,4)'
32652+ SET @sql = N'SELECT name FROM sys.databases d WHERE 1=1'
32653+ + CASE WHEN @system_only = 1 THEN ' AND d. database_id IN (1,2,3,4)'
3264532654 ELSE ''
3264632655 END
3264732656 + CASE WHEN @user_only = 1
32648- THEN ' AND database_id NOT IN (1,2,3,4)'
32657+ THEN ' AND d. database_id NOT IN (1,2,3,4)'
3264932658 ELSE ''
3265032659 END
3265132660-- To exclude databases from changes
3265232661 + CASE WHEN @exlist IS NOT NULL
32653- THEN ' AND name NOT IN (' + @exlist + ')'
32662+ THEN ' AND d. name NOT IN (' + @exlist + ')'
3265432663 ELSE ''
3265532664 END + CASE WHEN @name_pattern <> N'%'
32656- THEN ' AND name LIKE N''' + REPLACE(@name_pattern,
32665+ THEN ' AND d. name LIKE N''' + REPLACE(@name_pattern,
3265732666 '''', '''''')
3265832667 + ''''
3265932668 ELSE ''
3266032669 END + CASE WHEN @dblist IS NOT NULL
32661- THEN ' AND name IN (' + @dblist + ')'
32670+ THEN ' AND d. name IN (' + @dblist + ')'
3266232671 ELSE ''
3266332672 END
3266432673 + CASE WHEN @recovery_model_desc IS NOT NULL
32665- THEN ' AND recovery_model_desc = N'''
32674+ THEN ' AND d. recovery_model_desc = N'''
3266632675 + @recovery_model_desc + ''''
3266732676 ELSE ''
3266832677 END
3266932678 + CASE WHEN @compatibility_level IS NOT NULL
32670- THEN ' AND compatibility_level = '
32679+ THEN ' AND d. compatibility_level = '
3267132680 + RTRIM(@compatibility_level)
3267232681 ELSE ''
3267332682 END
3267432683 + CASE WHEN @state_desc IS NOT NULL
32675- THEN ' AND state_desc = N''' + @state_desc + ''''
32684+ THEN ' AND d. state_desc = N''' + @state_desc + ''''
3267632685 ELSE ''
3267732686 END
32687+ + CASE WHEN @state_desc = 'ONLINE' AND SERVERPROPERTY('IsHadrEnabled') = 1
32688+ THEN ' AND NOT EXISTS (SELECT 1
32689+ FROM sys.dm_hadr_database_replica_states drs
32690+ JOIN sys.availability_replicas ar
32691+ ON ar.replica_id = drs.replica_id
32692+ JOIN sys.dm_hadr_availability_group_states ags
32693+ ON ags.group_id = ar.group_id
32694+ WHERE drs.database_id = d.database_id
32695+ AND ar.secondary_role_allow_connections = 0
32696+ AND ags.primary_replica <> @@SERVERNAME)'
32697+ ELSE ''
32698+ END
3267832699 + CASE WHEN @is_read_only IS NOT NULL
32679- THEN ' AND is_read_only = ' + RTRIM(@is_read_only)
32700+ THEN ' AND d. is_read_only = ' + RTRIM(@is_read_only)
3268032701 ELSE ''
3268132702 END
3268232703 + CASE WHEN @is_auto_close_on IS NOT NULL
32683- THEN ' AND is_auto_close_on = ' + RTRIM(@is_auto_close_on)
32704+ THEN ' AND d. is_auto_close_on = ' + RTRIM(@is_auto_close_on)
3268432705 ELSE ''
3268532706 END
3268632707 + CASE WHEN @is_auto_shrink_on IS NOT NULL
32687- THEN ' AND is_auto_shrink_on = ' + RTRIM(@is_auto_shrink_on)
32708+ THEN ' AND d. is_auto_shrink_on = ' + RTRIM(@is_auto_shrink_on)
3268832709 ELSE ''
3268932710 END
3269032711 + CASE WHEN @is_broker_enabled IS NOT NULL
32691- THEN ' AND is_broker_enabled = ' + RTRIM(@is_broker_enabled)
32712+ THEN ' AND d. is_broker_enabled = ' + RTRIM(@is_broker_enabled)
3269232713 ELSE ''
3269332714 END;
3269432715
0 commit comments