USP_CREATECOLUMNSTOREINDEX

Parameters

Parameter Parameter Type Mode Description
@SCHEMA nvarchar(255) IN
@TABLE nvarchar(255) IN

Definition

Copy

CREATE procedure [BBDW].[USP_CREATECOLUMNSTOREINDEX] (@SCHEMA nvarchar(255), @TABLE nvarchar(255))

as

  declare @SQL nvarchar(max);
  declare @COLUMNS nvarchar(max);
  declare @CSINDEX nvarchar(255) = (select BBDW.[UFN_GETCOLUMNSTOREINDEXNAME] (@TABLE));
  declare @FILEGROUP nvarchar(40);

  set @FILEGROUP = 
    case
      when @TABLE like '%FACT_%' then ' on [BBRPT_FACTIDXGROUP]'
      when @TABLE like '%DIM_%' then ' on [BBRPT_DIMIDXGROUP]' 
      else ' on [BBRPT_DEFGROUP]'
    end;

  exec BBDW.[USP_DROPOBJECTIFEXISTS] @SCHEMA, @CSINDEX, @TABLE;

  set @SQL = 'create nonclustered columnstore index [' + @CSINDEX + '] on ' + @SCHEMA + '.[' + @TABLE + '] (';

  select 
    @COLUMNS = COALESCE(@COLUMNS+',' ,'') + [COLUMN_NAME]
  from INFORMATION_SCHEMA.[COLUMNS]
  where [TABLE_SCHEMA] = @SCHEMA and [TABLE_NAME] = @TABLE
  and ([DATA_TYPE] not in ('binary', 'varbinary', 'ntext', 'text', 'image', 'uniqueidentifier', 'rowversion', 'timestamp', 'sql_variant', 'decimal', 'hierarchyid', 'xml')
  and ([CHARACTER_MAXIMUM_LENGTH] <> -1 or [CHARACTER_MAXIMUM_LENGTH] is null)
  and ([NUMERIC_PRECISION] < 19 or [NUMERIC_PRECISION] is null or [DATA_TYPE] = 'bigint')
  and ([DATETIME_PRECISION] <3 or [DATETIME_PRECISION] is null)
  );

  set @SQL = @SQL + @COLUMNS + ')' + @FILEGROUP;

  exec sp_executesql @SQL;