CREATE_OR_DROP_CLUSTEREDINDEX

Parameters

Parameter Parameter Type Mode Description
@SCHEMA nvarchar(128) IN
@TABLENAME nvarchar(128) IN
@COLUMNNAME nvarchar(128) IN
@CREATE_OR_DROP bit IN

Definition

Copy

create procedure [BBDW].[CREATE_OR_DROP_CLUSTEREDINDEX]
  @SCHEMA nvarchar(128),
  @TABLENAME nvarchar(128),
  @COLUMNNAME nvarchar(128),
  @CREATE_OR_DROP bit --1 to create, 0 to drop
as
  set nocount on;

  declare @SQL nvarchar(max)

  if @CREATE_OR_DROP = 0 and exists (select 1 from INFORMATION_SCHEMA.TABLE_CONSTRAINTS where CONSTRAINT_SCHEMA = @SCHEMA and TABLE_NAME = @TABLENAME and CONSTRAINT_NAME = 'PK_' + @TABLENAME)
  begin

    set @SQL = 
      'if not exists(select top 1 1 from ' + @SCHEMA + '.[' + @TABLENAME + '])' + char(13) +
      'begin' + char(13) + 
      '  alter table ' + @SCHEMA + '.[' + @TABLENAME + '] drop constraint [PK_' + @TABLENAME + '];' + char(13) +
      'end';

    exec sp_executesql @SQL;

  end

  else if @CREATE_OR_DROP = 1  and not exists (select 1 from INFORMATION_SCHEMA.TABLE_CONSTRAINTS where CONSTRAINT_SCHEMA = @SCHEMA and TABLE_NAME = @TABLENAME and CONSTRAINT_NAME = 'PK_' + @TABLENAME)
  begin

    set @SQL = 'alter table ' + @SCHEMA + '.[' + @TABLENAME + '] add constraint [PK_' + @TABLENAME + '] primary key clustered ([' + @COLUMNNAME + '] asc);';
    exec sp_executesql @SQL;

  end