DROP TABLE COM CONDIÇÃO TEM COMO?

 Tópico anterior Próximo tópico Novo tópico

DROP TABLE COM CONDIÇÃO TEM COMO?

SQL / DATABASE

 Compartilhe  Compartilhe  Compartilhe
#491102 - 06/11/2019 11:05:17

JCM0867
BALNEARIO CAMBORIU
Cadast. em:Março/2012


Olá pessoal
Tenho um banco no sql Server e gostaria de apagar todas as tabelas que começam com "BGG" dentro do SQL

Pois bem fiz um a query para selecionar as Tabelas que começam com BBG:
Select a.Name as Tabela
From sys.tables a
Inner Join sys.indexes c ON a.OBJECT_ID = c.object_id
Inner Join sys.partitions b ON c.object_id = b.OBJECT_ID AND c.index_id = b.index_id
Where left(a.Name,3) = 'BGG'


Agora quero usar um Drop Table para apagar essas tabelas selecionadas
Ou já colocar a condição direto direto no Drop Table não sei se tem como.

Resumindo, qual a melhor maneira para apagar todas as Tabelas que começam com BGG?

Grato



#491110 - 06/11/2019 18:24:17

VERAPALI
CURITIBA
Cadast. em:Dezembro/2003


Teoricamente um execute nao funcionaria a partir do recordset gerado ?
Nao sou expert em sql server mas no teu while do recordset dar um execute nao rola ?

Vera Lucia


Resposta escolhida #491113 - 06/11/2019 19:50:03

JABA
CABO FRIO
Cadast. em:Agosto/2005


(
select
  'ALTER TABLE ' + tc.table_name + ' DROP CONSTRAINT ' + tc.constraint_name + ';'
from
  INFORMATION_SCHEMA.TABLES t
  ,INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc
where
  t.table_name = tc.table_name
  and tc.constraint_name not like '%_pk'
  and tc.constraint_name not like 'pk_%'
  and t.table_catalog='<schema>'
) UNION (
select
  'DROP TABLE ' + t.table_name + ';'
from
  INFORMATION_SCHEMA.TABLES t
where
  t.table_catalog='<schema>'
)


Tem várias soluções aqui: stackoverflow.com/questions/4858488/sql-server-drop-table-cascade-equivalent

_______________________________________________________________________________________________

Se a alma ou espírito são imateriais, como eles fazem para se localizarem quando o corpo está em movimento?



#491115 - 07/11/2019 00:40:13

JCM0867
BALNEARIO CAMBORIU
Cadast. em:Março/2012


Jaba,
Nesse código onde entra os três primeiros caracteres das tabelas sendo BGG?
Não sei se entendi direito

Grato



#491116 - 07/11/2019 02:22:08

JABA
CABO FRIO
Cadast. em:Agosto/2005


Tenta lá no final pra ver se vai.

(
select
  'ALTER TABLE ' + tc.table_name + ' DROP CONSTRAINT ' + tc.constraint_name + ';'
from
  INFORMATION_SCHEMA.TABLES t
  ,INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc
where
  t.table_name = tc.table_name
  and tc.constraint_name not like '%_pk'
  and tc.constraint_name not like 'pk_%'
  and t.table_catalog='<schema>'
) UNION (
select
  'DROP TABLE ' + t.table_name + ';'
from
  INFORMATION_SCHEMA.TABLES t
where
  left(t.table_name,3) = 'BGG' And t.table_catalog='<schema>'
)


_______________________________________________________________________________________________

Se a alma ou espírito são imateriais, como eles fazem para se localizarem quando o corpo está em movimento?



#491120 - 07/11/2019 10:21:54

FOXMAN
BARRETOS
Cadast. em:Janeiro/2001


Membro da equipe
Citação:
:
Rodei deu (No column name)

Apesar de ser outro banco(MySQL)
A tempos atras criei um Stored Procedure para renomear todas as tabelas.
Nela eu dava um loop buscando as tabelas de um determinado schema, e caso encontrasse Alterava o nome da tabela.
No meu caso de TABxxxxxx para TBLxxxxxxx
A mesma lógica pode ser aplicada para o Drop...


Grupo DotNet.Br no FaceBook

Grupo WhatsDev



#491121 - 07/11/2019 10:26:48

JCM0867
BALNEARIO CAMBORIU
Cadast. em:Março/2012


Última edição em 07/11/2019 11:54:53 por JCM0867

Ele listou as tabelas mas não executou o Drop Table
Bom é só copiar o resultado e rodar

Essa query abaixo gera a mesma coisa apresentado no primeiro post:

Select 'DROP TABLE ' + a.Name  + ';' as Tabela
From sys.tables a
Inner Join sys.indexes c ON a.OBJECT_ID = c.object_id
Inner Join sys.partitions b ON c.object_id = b.OBJECT_ID AND c.index_id = b.index_id
Where left(a.Name,3) = 'BGG'

Mas a query apresentado por ti é melhor por causa do tc.constraint_name

só achava que houvesse uma maneira mais simples do tipo:
Drop Table Tabelas Where left(Tabelas,3) = 'BGG'

Bom, mas foi resolvido,
Grato

FOXMAN,
É que tinha colocado o nome do banco errado por isso não listou nada
Em VB eu tenho uma rotina de renomear tabelas fazendo um loop no banco de dados









 Tópico anterior Próximo tópico Novo tópico


Tópico encerrado, respostas não sao permitidas
Encerrado por JCM0867 em 07/11/2019 20:05:17