Usuário com melhor resposta
Exclusão de Tabela

Pergunta
-
Pessoal, me tirem uma pequena dúvida. Tenho uma tabela que preciso excluir constante, porém o que quero criar um job com agendamento pra deletar de forma automatizada a mesma.
Estava usando a consulta abaixo, mas não atendem minhas necessidades:
exec sp_msforeachdb ' USE Livraria --print ''>>>>> '' + db_name() IF (db_name() NOT IN (''master'', ''tempdb'', ''model'', ''msdb'') ) BEGIN declare @name varchar(100) declare @xt char(2) declare @ssn sysname declare @ss nvarchar(1500) declare @dg INT set @dg = 1 declare myC cursor for SELECT so.name, so.type, sc.name as ssn FROM sys.objects so INNER JOIN sys.sysusers su ON so.schema_id = su.uid INNER JOIN sys.schemas sc ON so.schema_id = sc.schema_id WHERE (so.name Like ''TMP_%'') AND so.Is_MS_Shipped = 0 ORDER BY so.type, so.name open myC fetch next from myC into @name, @xt, @ssn while @@fetch_status = 0 begin if @xt = ''U'' begin set @ss = ''DROP TABLE '' + @ssn + ''.'' + @name if @dg = 1 print space(7) + @ss else exec (@ss) set @ss = '' '' end fetch next from myC into @name, @xt, @ssn end close myC deallocate myC END '
Agradeço desde já!
Respostas
-
Olá Amigo.
Utilize o sp_executesql, para executar o comando para você. Basta agora schedular em um job.
use Teste go declare @cmd nvarchar(4000) while exists (select 1 from sys.sysobjects where name like 'TMP_%' and type = 'U') begin select top 1 @cmd = 'DROP TABLE '+name from sys.sysobjects where name like 'TMP_%' and type = 'U' exec sp_executesql @cmd end
abraço.
- Marcado como Resposta Jerfeson S. Barbosa segunda-feira, 25 de novembro de 2013 14:17
Todas as Respostas
-
Jerfeson,
O nome da tabela é sempre o mesmo?
Você precisa realmente excluir esta tabela? Não seria somente o caso de realizar um Truncate para excluir os dados?
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]
-
Olá Galvão, na verdade a tabela é criada por uma aplicação de relatório e que o prefixo é sempre "TMP_", por esse motivo que coloquei LIKE. O que de fato preciso é agendar um job pra rodar periodicamente, no qual exclua todas a tabelas que se iniciam com "TMP_" de um determinada base. Era mais ou menos isso queria chegar com a consulta. Não seria excluir os dados mais sim a tabela. Excluir os resultados desta consulta:
select name from sys.sysobjects where name like 'TMP_%' and type = 'U'
- Editado Jerfeson S. Barbosa sábado, 23 de novembro de 2013 13:10 Adicionando Texto
-
Por enquanto estou usando a consulta:
use Teste select 'DROP TABLE '+name as Tabela_Deletar from sys.sysobjects where name like 'TMP_%' and type = 'U'
Pra obter o que preciso, porém existe a dependência de executar o processo ainda manualmente, sendo que o objetivo é automatizar através de um procedimento ou talvez um gatilho.
-
Olá Amigo.
Utilize o sp_executesql, para executar o comando para você. Basta agora schedular em um job.
use Teste go declare @cmd nvarchar(4000) while exists (select 1 from sys.sysobjects where name like 'TMP_%' and type = 'U') begin select top 1 @cmd = 'DROP TABLE '+name from sys.sysobjects where name like 'TMP_%' and type = 'U' exec sp_executesql @cmd end
abraço.
- Marcado como Resposta Jerfeson S. Barbosa segunda-feira, 25 de novembro de 2013 14:17
-