@@ -31,7 +31,11 @@ CREATE OR ALTER PROCEDURE dbo.sp_Develop
3131 ,@GetAllDatabases BIT = 0
3232 ,@IgnoreDatabases NVARCHAR (MAX ) = NULL /* Comma-delimited list of databases you want to skip */
3333 ,@BringThePain BIT = 0
34- ,@IgnoreCheckIds NVARCHAR (MAX ) = NULL /* Comma-delimited list of check ids you want to skip */
34+ -- ,@IgnoreCheckIds NVARCHAR(MAX) = NULL /* Comma-delimited list of check ids you want to skip */
35+ ,@SkipChecksServer NVARCHAR (256 ) = NULL
36+ ,@SkipChecksDatabase NVARCHAR (256 ) = NULL
37+ ,@SkipChecksSchema NVARCHAR (256 ) = NULL
38+ ,@SkipChecksTable NVARCHAR (256 ) = NULL
3539 ,@ShowRememberChecks BIT = 0
3640 ,@OutputType VARCHAR (20 ) = ' TABLE'
3741 ,@OutputXMLasNVARCHAR BIT = 0
@@ -124,57 +128,76 @@ RETURN 0;
124128
125129 IF OBJECT_ID (' tempdb..#SkipChecks' ) IS NOT NULL DROP TABLE #SkipChecks;
126130 CREATE TABLE #SkipChecks (
127- CheckId INT NOT NULL
131+ ServerName NVARCHAR ( 128 ) NULL
128132 ,DatabaseName NVARCHAR (128 ) NULL
129- ,ServerName NVARCHAR (128 ) NULL
133+ ,ObjectName NVARCHAR (256 ) NULL
134+ ,CheckId INT NULL
130135 );
131136 CREATE CLUSTERED INDEX CheckId_DatabaseName
132137 ON #SkipChecks (CheckId, DatabaseName);
133138
134139 /* *********************************************************************************************************************
135- ** What checks are we going to perform?
136- **********************************************************************************************************************/
137- IF @IgnoreCheckIds IS NOT NULL
138- AND LEN (@IgnoreCheckIds) > 0
140+ ** Skip Checks
141+ ** You can build your own table with a list of checks to skip.
142+ ** [TODO: LINK TO README.md for instructions]
143+ **********************************************************************************************************************/
144+ IF @SkipChecksTable IS NOT NULL
145+ AND @SkipChecksSchema IS NOT NULL
146+ AND @SkipChecksDatabase IS NOT NULL
139147 BEGIN
140- IF @Debug IN (1 , 2 )
141- RAISERROR (N ' Setting up filter to ignore databases' , 0 , 1 ) WITH NOWAIT ;
142-
143- SET @ChecksToIgnore = N ' ' ;
144148
145- /* Do not use STRING_SPLIT(), we want this to work in SQL Servers before 2016 */
146- WHILE LEN (@IgnoreCheckIds) > 0
147- BEGIN
148- IF PATINDEX (' %,%' , @IgnoreCheckIds) > 0
149- BEGIN
150- SET @ChecksToIgnore = SUBSTRING (@IgnoreCheckIds, 0 , PATINDEX (' %,%' , @IgnoreCheckIds));
149+ IF @Debug IN (1 , 2 ) RAISERROR (' Inserting SkipChecks' , 0 , 1 ) WITH NOWAIT ;
151150
152- INSERT INTO
153- #SkipChecks (CheckId, DatabaseName, ServerName)
151+ SET @StringToExecute = N'
152+ INSERT INTO
153+ #SkipChecks(ServerName, DatabaseName, ObjectName, CheckId)
154154 SELECT
155- CheckId = LTRIM (RTRIM (@ChecksToIgnore))
156- ,DatabaseName = NULL
157- ,ServerName = NULL
158- OPTION (RECOMPILE );
155+ ServerName
156+ ,DatabaseName
157+ ,ObjectName
158+ ,CheckId
159+ FROM ' ;
159160
160- SET @IgnoreCheckIds = SUBSTRING (@IgnoreCheckIds, LEN (@ChecksToIgnore + ' ,' ) + 1 , LEN (@IgnoreCheckIds));
161- END ;
162- ELSE
163- BEGIN
164- SET @ChecksToIgnore = @IgnoreCheckIds;
165- SET @IgnoreCheckIds = NULL ;
161+ IF LTRIM (RTRIM (@SkipChecksServer)) <> ' '
162+ BEGIN
163+ SET @StringToExecute + = QUOTENAME (@SkipChecksServer) + N ' .' ;
164+ END ;
166165
167- INSERT INTO
168- #SkipChecks (CheckId, DatabaseName, ServerName)
169- SELECT
170- CheckId = LTRIM (RTRIM (@ChecksToIgnore))
171- ,DatabaseName = NULL
172- ,ServerName = NULL
173- OPTION (RECOMPILE );
174- END ;
166+ SET @StringToExecute + = QUOTENAME (@SkipChecksDatabase) + N ' .' + QUOTENAME (@SkipChecksSchema) + N ' .' + QUOTENAME (@SkipChecksTable) + N'
167+ WHERE
168+ ServerName IS NULL
169+ OR ServerName = SERVERPROPERTY('' ServerName'' )
170+ GROUP BY
171+ ServerName
172+ ,DatabaseName
173+ ,ObjectName
174+ ,CheckId
175+ OPTION (RECOMPILE);' ;
176+
177+ EXEC sys .sp_executesql @stmt = @StringToExecute;
178+ IF @Debug = 2 AND @StringToExecute IS NOT NULL PRINT @StringToExecute;
179+
180+ /* Check if we should be running checks on this server, exit out if not. */
181+ IF EXISTS (
182+ SELECT
183+ *
184+ FROM
185+ #SkipChecks AS SC
186+ WHERE
187+ SC .ServerName = SERVERPROPERTY (' ServerName' )
188+ AND SC .DatabaseName IS NULL
189+ AND SC .ObjectName IS NULL
190+ )
191+ BEGIN
192+ IF @Debug IN (1 , 2 )
193+ RAISERROR (' The SQL Server is marked to be skipped' , 0 , 1 ) WITH NOWAIT ;
194+ RETURN 0 ;
175195 END ;
176- END ;
177196
197+ IF @Debug IN (1 , 2 )
198+ RAISERROR (' The SQL Server is not marked to be skipped' , 0 , 1 ) WITH NOWAIT ;
199+
200+ END ;
178201
179202 /* *********************************************************************************************************************
180203 ** Skip checks for specific SQL Servers
@@ -325,59 +348,114 @@ RETURN 0;
325348 END ;
326349 END ;
327350
328- IF @IgnoreDatabases IS NOT NULL
329- AND LEN (@IgnoreDatabases) > 0
330- BEGIN
331- IF @Debug IN (1 , 2 )
332- RAISERROR (N ' Setting up filter to ignore databases' , 0 , 1 ) WITH NOWAIT ;
351+ -- yyyyyyy
352+
353+ SELECT * FROM #SkipChecks AS SC;
354+
355+
356+
357+ RETURN 0 ; -- TODO: remove me after testing
358+
359+
360+
361+
362+
333363
334- SET @DatabaseToIgnore = N ' ' ;
335364
336- WHILE LEN (@IgnoreDatabases) > 0
337- BEGIN
338- IF PATINDEX (' %,%' , @IgnoreDatabases) > 0
339- BEGIN
340- SET @DatabaseToIgnore = SUBSTRING (@IgnoreDatabases, 0 , PATINDEX (' %,%' , @IgnoreDatabases));
341-
342- INSERT INTO
343- #Ignore_Databases (DatabaseName, Reason)
344- SELECT
345- LTRIM (RTRIM (@DatabaseToIgnore))
346- ,' Specified in the @IgnoreDatabases parameter'
347- OPTION (RECOMPILE );
348-
349- SET @IgnoreDatabases = SUBSTRING (@IgnoreDatabases, LEN (@DatabaseToIgnore + ' ,' ) + 1 , LEN (@IgnoreDatabases));
350- END ;
351- ELSE
352- BEGIN
353- SET @DatabaseToIgnore = @IgnoreDatabases;
354- SET @IgnoreDatabases = NULL ;
355-
356- INSERT INTO
357- #Ignore_Databases (DatabaseName, Reason)
358- SELECT
359- LTRIM (RTRIM (@DatabaseToIgnore))
360- ,' Specified in the @IgnoreDatabases parameter'
361- OPTION (RECOMPILE );
362- END ;
363- END ;
364- END ;
365+
366+
367+
368+
369+
370+
371+
372+
373+
374+
375+ -- IF @IgnoreDatabases IS NOT NULL
376+ -- AND LEN(@IgnoreDatabases) > 0
377+ -- BEGIN
378+ -- IF @Debug IN (1, 2)
379+ -- RAISERROR(N'Setting up filter to ignore databases', 0, 1) WITH NOWAIT;
380+
381+ -- SET @DatabaseToIgnore = N'';
382+
383+ -- WHILE LEN(@IgnoreDatabases) > 0
384+ -- BEGIN
385+ -- IF PATINDEX('%,%', @IgnoreDatabases) > 0
386+ -- BEGIN
387+ -- SET @DatabaseToIgnore = SUBSTRING(@IgnoreDatabases, 0, PATINDEX('%,%', @IgnoreDatabases));
388+
389+ -- INSERT INTO
390+ -- #Ignore_Databases (DatabaseName, Reason)
391+ -- SELECT
392+ -- LTRIM(RTRIM(@DatabaseToIgnore))
393+ -- ,'Specified in the @IgnoreDatabases parameter'
394+ -- OPTION (RECOMPILE);
395+
396+ -- SET @IgnoreDatabases = SUBSTRING(@IgnoreDatabases, LEN(@DatabaseToIgnore + ',') + 1, LEN(@IgnoreDatabases));
397+ -- END;
398+ -- ELSE
399+ -- BEGIN
400+ -- SET @DatabaseToIgnore = @IgnoreDatabases;
401+ -- SET @IgnoreDatabases = NULL;
402+
403+ -- INSERT INTO
404+ -- #Ignore_Databases (DatabaseName, Reason)
405+ -- SELECT
406+ -- LTRIM(RTRIM(@DatabaseToIgnore))
407+ -- ,'Specified in the @IgnoreDatabases parameter'
408+ -- OPTION (RECOMPILE);
409+ -- END;
410+ -- END;
411+ -- END;
365412
366413 END ;
367414 ELSE
368415 BEGIN
369- INSERT INTO
370- #DatabaseList (DatabaseName)
371- SELECT
372- CASE
373- WHEN @DatabaseName IS NULL
374- OR @DatabaseName = N ' ' THEN
375- DB_NAME ()
376- ELSE
377- @DatabaseName
378- END ;
416+
417+ -- zzzzzz
418+
419+ -- SELECT * FROM #SkipChecks AS SC
420+
421+ IF EXISTS (
422+ SELECT
423+ *
424+ FROM
425+ #SkipChecks AS SC
426+ WHERE
427+ (SC .ServerName = SERVERPROPERTY (' ServerName' ) OR SC .ServerName IS NULL )
428+ AND SC .DatabaseName = DB_NAME ()
429+ AND SC .CheckId IS NULL
430+ )
431+ BEGIN
432+ IF @Debug IN (1 , 2 )
433+ RAISERROR (' The database is marked to be skipped' , 0 , 1 ) WITH NOWAIT ;
434+ RETURN 0 ;
435+
436+ END ;
437+ ELSE
438+ BEGIN
439+ INSERT INTO
440+ #DatabaseList (DatabaseName)
441+ SELECT
442+ CASE
443+ WHEN @DatabaseName IS NULL
444+ OR @DatabaseName = N ' ' THEN
445+ DB_NAME ()
446+ ELSE
447+ @DatabaseName
448+ END ;
449+ END ;
450+
451+
379452 END ;
380453
454+
455+
456+
457+
458+
381459 SET @NumDatabases = (SELECT COUNT (* )FROM #DatabaseList);
382460 SET @Message = N ' Number of databases to examine: ' + CAST (@NumDatabases AS NVARCHAR (50 ));
383461 IF @Debug IN (1 , 2 ) RAISERROR (@Message, 0 , 1 ) WITH NOWAIT ;
0 commit comments