Revisions Spec: Drop and Create Indexes

The following element, contained within a revisions spec, contains embedded Transact-SQL. The deployment utility runs the Transact-SQL to create a procedure which drops and creates indexes. The CREATE PROCEDURE statement establishes a procedure to be used to create or drop indices from a table. For more information about the CREATE PROCEDURE statement, see Microsoft's MSDN article at CREATE PROCEDURE (Transact-SQL).

The Transact-SQL specifies that if no parameter is passed to the stored procedure, to throw an error. The parameter provided to execute the stored procedure must be 1 or 0. 1 indicates to create indexes and 0 indicates to drop indexes. For more information about the CREATE INDEX statement, see Microsoft's MSDN article at CREATE INDEX (Transact-SQL). For information specifically about nonclustered indexes, see Microsoft's MSDN article at Creating Nonclustered Indexes.

To maintain consistent naming that avoids conflicts with out-of-the-box tables, apply the _EXT suffix to names for extension tables. If the extension is for a staging table, also apply the _STAGE suffix. Always apply _EXT first. Appropriate suffixes are _EXT and _EXT_STAGE. For the create and drop indices procedure, apply the CREATE_OR_DROP_ prefix and the _INDICES suffix.

  <DBRevision ID="20">
    <ExecuteSql>
      <![CDATA[	
create procedure [BBDW].[CREATE_OR_DROP_DIM_CONSTITUENTADDRESS_EXT_INDICES]
  @CREATE_OR_DROP bit --1 to create, 0 to drop.
  as
  set nocount on;

  if @CREATE_OR_DROP is null
    raiserror('@CREATE_OR_DROP must be 1 or 0 in [BBDW].[CREATE_OR_DROP_DIM_CONSTITUENTADDRESS_EXT_INDICES]',16,10);

  if @CREATE_OR_DROP =1
  begin
  --create

    if  [BBDW].[UFN_INDEXEXISTS]('IX_DIM_CONSTITUENTADDRESS_EXT_ADDRESSSYSTEMID') = 0
      create nonclustered index [IX_DIM_CONSTITUENTADDRESS_EXT_ADDRESSSYSTEMID] on [BBDW].[DIM_CONSTITUENTADDRESS_EXT] ([ADDRESSSYSTEMID]) on [BBRPT_DIMIDXGROUP]
      
    if  [BBDW].[UFN_INDEXEXISTS]('IX_DIM_CONSTITUENTADDRESS_EXT_ADDRESSTYPE') = 0
      create nonclustered index [IX_DIM_CONSTITUENTADDRESS_EXT_ADDRESSTYPE] on [BBDW].[DIM_CONSTITUENTADDRESS_EXT] ([ADDRESSTYPE]) on [BBRPT_DIMIDXGROUP];      
      
    if  [BBDW].[UFN_INDEXEXISTS]('IX_DIM_CONSTITUENTADDRESS_EXT_CONSTITUENTDIMID') = 0
      create nonclustered index [IX_DIM_CONSTITUENTADDRESS_EXT_CONSTITUENTDIMID] on [BBDW].[DIM_CONSTITUENTADDRESS_EXT] ([CONSTITUENTDIMID]) on [BBRPT_DIMIDXGROUP];      
      
    if  [BBDW].[UFN_INDEXEXISTS]('IX_DIM_CONSTITUENTADDRESS_EXT_SOURCEDIMID') = 0
      create nonclustered index [IX_DIM_CONSTITUENTADDRESS_EXT_SOURCEDIMID] on [BBDW].[DIM_CONSTITUENTADDRESS_EXT] ([SOURCEDIMID]) on [BBRPT_DIMIDXGROUP];      

  end
  else
  begin
  --drop

    if  [BBDW].[UFN_INDEXEXISTS]('IX_DIM_CONSTITUENTADDRESS_EXT_ADDRESSSYSTEMID') = 1
     drop index [IX_DIM_CONSTITUENTADDRESS_EXT_ADDRESSSYSTEMID] on [BBDW].[DIM_CONSTITUENTADDRESS_EXT];
     
    if  [BBDW].[UFN_INDEXEXISTS]('IX_DIM_CONSTITUENTADDRESS_EXT_ADDRESSTYPE') = 1
     drop index [IX_DIM_CONSTITUENTADDRESS_EXT_ADDRESSTYPE] on [BBDW].[DIM_CONSTITUENTADDRESS_EXT];
     
    if  [BBDW].[UFN_INDEXEXISTS]('IX_DIM_CONSTITUENTADDRESS_EXT_CONSTITUENTDIMID') = 1
     drop index [IX_DIM_CONSTITUENTADDRESS_EXT_CONSTITUENTDIMID] on [BBDW].[DIM_CONSTITUENTADDRESS_EXT];
     
    if  [BBDW].[UFN_INDEXEXISTS]('IX_DIM_CONSTITUENTADDRESS_EXT_SOURCEDIMID') = 1
     drop index [IX_DIM_CONSTITUENTADDRESS_EXT_SOURCEDIMID] on [BBDW].[DIM_CONSTITUENTADDRESS_EXT];

  end
      ]]>
    </ExecuteSql>
  </DBRevision>