USP_CREATENONCLUSTEREDCOLUMNSTOREINDEX

Parameters

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

Definition

Copy

create procedure [BBDW].[USP_CREATENONCLUSTEREDCOLUMNSTOREINDEX] (@SCHEMA nvarchar(255), @TABLE nvarchar(255))

as

  declare @SQLVERSION decimal
  set @SQLVERSION = substring(cast(serverproperty('ProductVersion') as nvarchar), 1, charindex('.', cast(serverproperty('ProductVersion') as nvarchar)) - 1)

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

  declare @FILEGROUP nvarchar(40);

--SQL Server 2014: Nonclustered columnstore
if @SQLVERSION >= 12

begin

  set @FILEGROUP = 
    case
      when @TABLE like '%FACT_%' then ' on [BBRPT_FACTIDXGROUP]'
      when @TABLE like '%DIM_%' then ' on [BBRPT_DIMIDXGROUP]' 
      when @TABLE like '%RPT_%' then ' on [BBRPT_FACTIDXGROUP]'
      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 ('varbinary', 'ntext', 'text', 'image', 'rowversion', 'timestamp', 'sql_variant', 'hierarchyid', 'xml'
  and ([DATA_TYPE] not in ('nvarchar', 'varchar') or [CHARACTER_MAXIMUM_LENGTH] <> -1);

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

  exec sp_executesql @SQL;

end


--SQL Server 2012: Nonclustered columnstore
if @SQLVERSION = 11

begin

  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;

end;