USP_VALIDATION_MISSINGINDEXES

Parameters

Parameter Parameter Type Mode Description
@INCLUDEEXTENSIONS bit IN

Definition

Copy

CREATE procedure [BBDW].[USP_VALIDATION_MISSINGINDEXES] (@INCLUDEEXTENSIONS bit)
as

  declare @SCHEMA nvarchar(255);
  declare @TABLE nvarchar(255);
  declare @COLUMN nvarchar(255);
  declare @EXCEPTIONMESSAGE nvarchar(255);
  declare @TOTALEXCEPTIONCOUNT int = 0;

  declare [MISSINGINDEX] cursor local fast_forward for

  select
    s.[name] [SCHEMA],
    t.[name] [TABLE],
    c.[name] [COLUMN]
  from 
    sys.tables t
    inner join sys.schemas s on s.schema_id = t.schema_id
    inner join sys.extended_properties as ep on ep.major_id = t.object_id and ep.minor_id = 0
    inner join sys.columns c on c.object_id = t.object_id
  where 
    ep.name = 'MS_Description' and cast(ep.value as nvarchar(max)) not like 'DEPRECATED%' and
    (t.[name] like 'DIM_%' or t.[name] like 'FACT_%' or (@INCLUDEEXTENSIONS = 1 and t.[name] like 'USR_%')) and
    (c.[name] like '%DIMID' or c.[name] like '%FACTID%') and
    t.[name] not like '%_STAGE' and
    c.[name] <> 'SOURCEDIMID' and
    (@INCLUDEEXTENSIONS = 1 or t.[name] not like '%_EXT')

  except

  select 
    s.name as [SCHEMA], 
    t.name as [TABLE], 
    c.name as [COLUMN]
  from sys.tables t
    inner join sys.schemas s on t.schema_id = s.schema_id
    inner join sys.indexes i on i.object_id = t.object_id
    inner join sys.index_columns ic on ic.object_id = t.object_id
    inner join sys.columns c on c.object_id  = t.object_id and ic.index_id = i.index_id and ic.column_id = c.column_id;


  open [MISSINGINDEX];    
  fetch next from [MISSINGINDEX] into @SCHEMA, @TABLE, @COLUMN;

  while(@@fetch_status <> -1)

  begin

      set @EXCEPTIONMESSAGE = 'There is no index on [' + @SCHEMA + '].[' + @TABLE + '].[' + @COLUMN + ']'
      exec BBDW.[USP_VALIDATIONEXCEPTIONLOG] 'Missing Indexes', @EXCEPTIONMESSAGE
      set @TOTALEXCEPTIONCOUNT = @TOTALEXCEPTIONCOUNT + 1


  fetch next from [MISSINGINDEX] into @SCHEMA, @TABLE, @COLUMN;

  end

  close [MISSINGINDEX];
  deallocate [MISSINGINDEX];

  select @TOTALEXCEPTIONCOUNT;