USP_RECREATESCHEMABOUND

Definition

Copy

CREATE procedure [dbo].[USP_RECREATESCHEMABOUND]
as 
begin

  if exists ( select name from sys.tables where name = 'SCHEMABOUNDVIEWSDROPPED'
  begin
    declare @DROP nvarchar(max);
    declare @DEFINITION nvarchar(max);
    declare @OBJECT_ID int;

    declare CMod cursor FAST_FORWARD for select DROPSTMT, DEFINITION, OBJECT_ID from dbo.[SCHEMABOUNDVIEWSDROPPED] order by PRIORITY asc
    ;    
    open CMod;
    fetch next from CMod into @DROP, @DEFINITION, @OBJECT_ID;
    while @@FETCH_STATUS = 0
    begin
      exec (@DEFINITION);

      if exists(select 1 from sys.tables where name = 'SCHEMABOUNDVIESINDEXESDROPPED')
      begin
          declare @SQLCOMMAND nvarchar(max);
          declare @INDEXNAME nvarchar(max);
          declare CIndex cursor FAST_FORWARD for select INDEXNAME, INDEXCOMMAND from dbo.SCHEMABOUNDVIESINDEXESDROPPED where OBJECT_ID = @OBJECT_ID;
          open CIndex;
          fetch next from CIndex into @INDEXNAME, @SQLCOMMAND;
          while @@FETCH_STATUS = 0
          begin
              if not exists(select 1 from sys.indexes where name = @INDEXNAME)
                  exec (@SQLCOMMAND);
              fetch next from CIndex into @INDEXNAME, @SQLCOMMAND;
          end;
          close CIndex;
          deallocate CIndex;
      end;

      fetch next from CMod into @DROP, @DEFINITION, @OBJECT_ID;
    end;
    close Cmod;
    deallocate CMod;

    drop table dbo.[SCHEMABOUNDVIEWSDROPPED]
  end;

  if exists(select 1 from sys.tables where name = 'SCHEMABOUNDVIESINDEXESDROPPED')
      drop table dbo.SCHEMABOUNDVIESINDEXESDROPPED

end;