none
Apagar todos os registros do banco

Answers

  • Olá Roda esse script ai que você vai obter o delete para todas as tabelas.

     

    select ' delete from ' + name from sys.tables where is_ms_shipped = '0'

     

    Abraços

     

    Tuesday, December 23, 2008 3:34 PM
  • Olá Cléber,

     

    Acredito que a solução que postei seja útil para você.

     

    1 - Gere os scripts de drop e create para todas as FKs

    2 - Execute o script de drop das FKs

    2 - Execute o select que passei acima

    3 - Copie o resultado do select e execute no SSMS

    4 - Execute o script de create das FKs

     

    Abraços

     

    Tuesday, December 23, 2008 5:24 PM
  • Muito bem Demétrio, a lógica de remoção dos dados das tabela que o Cléber deseja está perfeita e pode ser feita da forma sugerida por vc.

     

    Cléber, só lembro a vc que se vc desejar resetar os valores de identity's vc deve usar o truncate ao invés do delete.

     

    Outra coisa, usando o delete, caso exista alguma falha no processo de delete em alguma tabela grande, isso irá gerar um rollback.

     

    Uma sugestão que eu te dou para vc realizar esse procedimento rapidamente seria o seguinte:

     

    1 - Gere um script de criação teu banco(SSMS), isso contemplará todos os objetos.

    2 - renomei o seu database para alguma_coisa_old

    ex:

    Code Snippet

    exec sp_renamedb [seu_database], [seu_database_old]

     

     

    3 - execute o script de criação do seu banco.

    vai estar todo limpo....que maravilha!!!

    Tuesday, December 23, 2008 5:40 PM

All replies

  • Olá Roda esse script ai que você vai obter o delete para todas as tabelas.

     

    select ' delete from ' + name from sys.tables where is_ms_shipped = '0'

     

    Abraços

     

    Tuesday, December 23, 2008 3:34 PM
  • Demétrio,

     

    Este script vai fazer um delete em todas as tables?
    Tuesday, December 23, 2008 3:48 PM
  • na verdade esse comando vai pegar as tabelas do banco e vai escrever "delete from" na frente. pegando essa informação, seria só rodar no servidor e ele iria deletar uma atrás da outra.

    o problema é se existirem relacionamentos entre as tabelas. seria um problema bem grande por isso tudo na ordem correta para deletar.
    Tuesday, December 23, 2008 3:54 PM
  • Ops,

     

    Valeu Anderson nem tinha me lembrado disso. Para resolver esse problema basta gerar um script de Drop e Create para todas as Constraints. Dropa antes de executar o comando e cria após executar o comando.

     

    Abraços

     

    Tuesday, December 23, 2008 3:59 PM
  • Esse script gera uma consulta onde os registros são as instruções para deletar todas as tabelas individualmente, mas eu ainda teria que "rodá-lo" executando cada registro como um comando.
    Como fazer isso?
    Tuesday, December 23, 2008 4:00 PM
  • Cléber,

     

    Certo, era que eu imaginava, mas da maneira que você postou eu fiquei em dúvida.

    Tuesday, December 23, 2008 4:02 PM
  • Olá Cléber,

     

    Basta você pegar o resultado da consulta e executar no SSMS ou Query Analyser.

     

    Você pode executar tudo de vez

     

    Abraços

     

    Tuesday, December 23, 2008 4:27 PM
  •  Demétrio Silva wrote:

    Olá Cléber,

     

    Basta você pegar o resultado da consulta e executar no SSMS ou Query Analyser.

     

    Você pode executar tudo de vez

     

    Abraços

     



    Ñ entedi Demétrio!

    Como executar os resultados da consulta?

    Obrigado.
    Tuesday, December 23, 2008 4:36 PM
  • Boa Tarde,

     

    Seu SQL Server é 2005 ?

     

    [ ]s,

     

    Gustavo

    Tuesday, December 23, 2008 4:44 PM
  • Olá,

    2008 Express

    Abraços
    Tuesday, December 23, 2008 5:01 PM
  • Olá Cléber,

     

    Há tabelas com auto relacionamento, ou seja, que referencia a si próprias ?

     

    [ ]s,

     

    Gustavo

     

    Tuesday, December 23, 2008 5:05 PM
  • Sim, há várias.

    mas se não existissem, qual seria o procedimento?
    Tuesday, December 23, 2008 5:07 PM
  • Olá Cléber,

     

    Acredito que a solução que postei seja útil para você.

     

    1 - Gere os scripts de drop e create para todas as FKs

    2 - Execute o script de drop das FKs

    2 - Execute o select que passei acima

    3 - Copie o resultado do select e execute no SSMS

    4 - Execute o script de create das FKs

     

    Abraços

     

    Tuesday, December 23, 2008 5:24 PM
  • Muito bem Demétrio, a lógica de remoção dos dados das tabela que o Cléber deseja está perfeita e pode ser feita da forma sugerida por vc.

     

    Cléber, só lembro a vc que se vc desejar resetar os valores de identity's vc deve usar o truncate ao invés do delete.

     

    Outra coisa, usando o delete, caso exista alguma falha no processo de delete em alguma tabela grande, isso irá gerar um rollback.

     

    Uma sugestão que eu te dou para vc realizar esse procedimento rapidamente seria o seguinte:

     

    1 - Gere um script de criação teu banco(SSMS), isso contemplará todos os objetos.

    2 - renomei o seu database para alguma_coisa_old

    ex:

    Code Snippet

    exec sp_renamedb [seu_database], [seu_database_old]

     

     

    3 - execute o script de criação do seu banco.

    vai estar todo limpo....que maravilha!!!

    Tuesday, December 23, 2008 5:40 PM
  • Olá Cléber,

     

    Por hora a solução do Demétrio é a mais indicada. Além de boa, já está disponível para que você a aplique. Construirei uma alternativa um pouco mais automática, mas preciso de mais tempo. Não sei se você pode esperar. Independente de poder esperar ou não, postarei-a quando acabar.

     

    [ ]s,

     

    Gustavo

    Tuesday, December 23, 2008 5:41 PM
  • Perfeito!

    Obrigado a todos.
    Tuesday, December 23, 2008 5:48 PM
  •  

    Boa solução Emanuel e bem lembrado sobre o Truncate. Gustavo, posta aqui sim a resolução.

     

    Já imagino como será feita, via tabelas de FKs pegando as tabelas que são refrenciadas e as que referenciam.

     

    Abraços e Feliz Natal a Todos

    Tuesday, December 23, 2008 6:38 PM
  • Olá Demétrio,

     

    O grande problema na exclusão através de um DELETE com bases na sys.tables é estipular a ordem da exclusão. Para não se preocupar com a ordem, você bem disse que era necessário gerar o script das FKs, aplicar os deletes e recriá-las.

     

    Se houvesse uma forma de estipular a ordem correta, não seria necessário o script e talvez até pudesse ser feito automaticamente. A metada do caminho eu já percorri. Possuo um script que revela a ordem correta das tabelas, mas esse script ainda não possui a situação de auto-referência. Assim que realizar o devido tratamento, o resto ficará bem fácil.

     

    Mapeando dependências entre tabelas

    http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!177.entry

     

    Logo que possível terminarei esse script e provavelmente essa tão comum necessidade virará uma entrada do blog. Só que acho que só depois do natal (rs).

     

    [ ]s,

     

    Gustavo

    Tuesday, December 23, 2008 6:52 PM
  • Muito bom Gustavo.

    Vou ficar de olho no seu blog.

    Abraços.
    Tuesday, December 23, 2008 6:58 PM
  • Olá Gustavo, Eu já tinha visto sua entrada no blog. Por isso comentei. Já Li muitos artigos de seu Blog pois achop sua didática excelente.

     

    Posta sim quando terminar.

     

    Abraços

     

    Tuesday, December 23, 2008 6:58 PM
  • Caso alguém se interesse em uma rotina que gere os scripts de drop e create de costraints, segue link:

    http://emanuelmcdba.spaces.live.com/blog/cns!E634CAFF4AFF243D!733.entry

     

    A rotina gera os scritis de create e drop de costraints do tipo foreign key, visto que dos outros tipo de constraints é bem mais fácil.

    Quando tiver um tempo irei colocar no meu blog um exemplo que gera os scripts de todos os tipo de constraints e outros objects do banco.

     

    Agora irei me desligar.....

     

    Um grande abraço a todos e FELIZ NATAL.

    Tuesday, December 23, 2008 11:29 PM