Script para dropar objetos com nome em comum

Hoje gostaria de postar um script bem simples mas que pode ser muito útil quando se necessita dropar um lote de objetos que tenham uma determinada "caracteristica" em comum. O exemplo pode não resolver seu problema, mas certamente servirá de idéia se você realmente estiver precisando.

Bom, no exemplo que estou postando, tenho na tabela GEUSUARI os códigos dos usuários do sistema. Quero apagar todas as tabelas que estejam variando o nome por código de usuário. Vejamos como fica o script para resolver esse probleminha...

 use SUABASE
   
 --primeiramente temos um cursor que irá ler todos os objetos do MSSQL  
 --levando em consideraçao a restricao imposta na clausula where  
 declare tabelas_cursor cursor   
      for  
      select name  
      from sysobjects   
      where xtype = 'U'  
      and right(name,3) in (select cd_usuario from GEUSUARI with(nolock) where usuario <> 'SUPERVISOR')  
      order by name  
        
 open tabelas_cursor  
   
 declare @objeto sysname  
   
 fetch next from tabelas_cursor   
 into @objeto  
   
 --laço while que irá ler todos os objetos retornados do cursor  
 while @@fetch_status <> -1  
 begin  
      --executa SQL dinâmico  
      exec('drop table ' + @objeto+'')  
     
      fetch next from tabelas_cursor   
      into @objeto  
 end  
   
 print 'Todas as tabelas de usuário foram apagadas.'  
   
 close tabelas_cursor  
 deallocate tabelas_cursor  
Bom, fazendo isso todas as tabelas que tenham no final do seu nome um código de usuário do sistema foram dropadas.

Valeu!

Comentários

Postagens mais visitadas deste blog

Função para contar palavra

Como descobrir qual linha está gerando deadlock

Script para desabilitar serviços desnecessários no Windows 7