USP_DROPOBJECTIFEXISTS

Parameters

Parameter Parameter Type Mode Description
@SCHEMA nvarchar(128) IN
@OBJECTNAME nvarchar(128) IN
@TABLENAME nvarchar(128) IN

Definition

Copy

create procedure BBDW.[USP_DROPOBJECTIFEXISTS] (
  @SCHEMA nvarchar(128),
  @OBJECTNAME nvarchar(128),
  @TABLENAME nvarchar(128) = null
  )  as

    declare @SQL nvarchar(300)

    --Drop existing table 
    if exists (select * from sys.[objects] o inner join sys.[schemas] s on o.[schema_id] = s.[schema_id] where o.[name] = @OBJECTNAME and s.[name] = @SCHEMA and o.[type] = 'U')
      begin
        set @SQL = 'drop table ' + @SCHEMA + '.' + @OBJECTNAME
        exec sp_executesql @SQL
      end

    --Drop existing view
    else if exists (select * from sys.[objects] o inner join sys.[schemas] s on o.[schema_id] = s.[schema_id] where o.[name] = @OBJECTNAME and s.[name] = @SCHEMA and o.[type] = 'V')
      begin
        set @SQL = 'drop view ' + @SCHEMA + '.' + @OBJECTNAME
        exec sp_executesql @SQL
      end

    --Drop existing stored procedure
    else if exists (select * from sys.[objects] o inner join sys.[schemas] s on o.[schema_id] = s.[schema_id] where o.[name] = @OBJECTNAME and s.[name] = @SCHEMA and o.[type] = 'P')
      begin
        set @SQL = 'drop procedure ' + @SCHEMA + '.' + @OBJECTNAME
        exec sp_executesql @SQL
      end

    --Drop existing function
    else if exists (select * from sys.[objects] o inner join sys.[schemas] s on o.[schema_id] = s.[schema_id] where o.[name] = @OBJECTNAME and s.[name] = @SCHEMA and o.[type] in ('FN', 'TF', 'IF'))
      begin
        set @SQL = 'drop function ' + @SCHEMA + '.' + @OBJECTNAME
        exec sp_executesql @SQL
      end

    --Drop existing index
    else if exists (select * from sys.[indexes] i inner join sys.[objects] o on i.[object_id] = o.[object_id] inner join sys.[schemas] s on o.[schema_id] = s.[schema_id] where i.[name] = @OBJECTNAME and o.[name] = @TABLENAME and s.[name] = @SCHEMA and o.[type] = 'U')
      begin
        set @SQL = 'drop index ' + @OBJECTNAME + ' on ' + @SCHEMA + '.' + @TABLENAME
        exec sp_executesql @SQL
      end

    --Drop existing trigger
    else if exists (select * from sys.[objects] o inner join sys.[schemas] s on o.[schema_id] = s.[schema_id] where o.[name] = @OBJECTNAME and s.[name] = @SCHEMA and o.[type] = 'TR')
      begin
        set @SQL = 'drop trigger ' + @SCHEMA + '.' + @OBJECTNAME
        exec sp_executesql @SQL
      end