@@ -32543,13 +32543,14 @@ GO
32543
32543
32544
32544
ALTER PROCEDURE dbo.sp_foreachdb
32545
32545
-- Original fields from sp_MSforeachdb...
32546
- @command1 NVARCHAR(MAX) ,
32546
+ @command1 NVARCHAR(MAX) = NULL ,
32547
32547
@replacechar NCHAR(1) = N'?' ,
32548
32548
@command2 NVARCHAR(MAX) = NULL ,
32549
32549
@command3 NVARCHAR(MAX) = NULL ,
32550
32550
@precommand NVARCHAR(MAX) = NULL ,
32551
32551
@postcommand NVARCHAR(MAX) = NULL ,
32552
32552
-- Additional fields for our sp_foreachdb!
32553
+ @command NVARCHAR(MAX) = NULL, --For backwards compatibility
32553
32554
@print_dbname BIT = 0 ,
32554
32555
@print_command_only BIT = 0 ,
32555
32556
@suppress_quotename BIT = 0 ,
@@ -32573,6 +32574,14 @@ AS
32573
32574
SET @Version = '2.0';
32574
32575
SET @VersionDate = '20171201';
32575
32576
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);
32576
32585
32577
32586
DECLARE @sql NVARCHAR(MAX) ,
32578
32587
@dblist NVARCHAR(MAX) ,
@@ -32640,55 +32649,67 @@ AS
32640
32649
32641
32650
CREATE TABLE #x ( db NVARCHAR(300) );
32642
32651
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)'
32645
32654
ELSE ''
32646
32655
END
32647
32656
+ 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)'
32649
32658
ELSE ''
32650
32659
END
32651
32660
-- To exclude databases from changes
32652
32661
+ CASE WHEN @exlist IS NOT NULL
32653
- THEN ' AND name NOT IN (' + @exlist + ')'
32662
+ THEN ' AND d. name NOT IN (' + @exlist + ')'
32654
32663
ELSE ''
32655
32664
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,
32657
32666
'''', '''''')
32658
32667
+ ''''
32659
32668
ELSE ''
32660
32669
END + CASE WHEN @dblist IS NOT NULL
32661
- THEN ' AND name IN (' + @dblist + ')'
32670
+ THEN ' AND d. name IN (' + @dblist + ')'
32662
32671
ELSE ''
32663
32672
END
32664
32673
+ CASE WHEN @recovery_model_desc IS NOT NULL
32665
- THEN ' AND recovery_model_desc = N'''
32674
+ THEN ' AND d. recovery_model_desc = N'''
32666
32675
+ @recovery_model_desc + ''''
32667
32676
ELSE ''
32668
32677
END
32669
32678
+ CASE WHEN @compatibility_level IS NOT NULL
32670
- THEN ' AND compatibility_level = '
32679
+ THEN ' AND d. compatibility_level = '
32671
32680
+ RTRIM(@compatibility_level)
32672
32681
ELSE ''
32673
32682
END
32674
32683
+ CASE WHEN @state_desc IS NOT NULL
32675
- THEN ' AND state_desc = N''' + @state_desc + ''''
32684
+ THEN ' AND d. state_desc = N''' + @state_desc + ''''
32676
32685
ELSE ''
32677
32686
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
32678
32699
+ 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)
32680
32701
ELSE ''
32681
32702
END
32682
32703
+ 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)
32684
32705
ELSE ''
32685
32706
END
32686
32707
+ 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)
32688
32709
ELSE ''
32689
32710
END
32690
32711
+ 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)
32692
32713
ELSE ''
32693
32714
END;
32694
32715
0 commit comments