none
Atualizações da estrutura original do SQL 2005 Express RRS feed

  • Pergunta

  • Boa noite a todos,

     

    Primeiramente trabalhamos com Visual 2005 e SQL 2005 Express.

     

    Estamos com um grande problema de não saber o que fazer?

     

                Ex. 1: Temos uma tabela chamada Clientes com seus devidos campos:

    IdCadCli

    Nome

    Telefone

     

    Ex.2: Temos outra tabela chamada Cheques com seus devidos campos:

    IdCh

    IdCadCli

    Valor

    Data

    Banco

               

    Obs.: Hoje no SQL 2005 Express está dessa maneira e funcionando perfeitamente em 50 clientes diferentes. Até aqui está tudo tranqüilo.

     

    Problema grande: Amanhã insiro, deleto, altero tamanho de algum campo no banco de dados como por exemplo:

     

                Ex.: Inserir novo campo na tabela:

                            IdCadCli

    Nome

    Telefone

    CPF                Campo novo

    CNPJ              Campo novo

     

    Perguntas:

     

    1-A melhor maneira é usar um script de atualização ou possui outras maneiras melhores?

     

    2-Se é um script tem como salvar ele em um arquivo e depois rodar vários scripts de uma só vês, assim realizando todas as alterações novas no banco de dados?

     

    Obs. Final:

     

    Precisamos voltar nos 50 clientes e instalar o novo executável, porém já possui várias mudanças no banco de dados inclusive relacionamentos novos.

     

    Precisamos fazer algo automático usando Visual 2005 e SQL 2005 Express.

     

    Gostaríamos que pudessem nós ajudar.

     

    Grato a todos.

    sexta-feira, 21 de agosto de 2009 04:19

Respostas

  • Sim, mas de preferência faça de uma maneira que consiga transacionar as alterações

    Begin Transaction, Commit Transaction

    se em algum momento der erro, rollback transaction e aborta a operação
    acredito ser o melhor para garantir os dados seguros.

    abraços
    sexta-feira, 21 de agosto de 2009 05:22

Todas as Respostas

  • Leonardo, a maneira mais fácil é (eu acho) usar sim Script SQL para atualização.

    Pra isso, vai ser preciso no Instalador de sua aplicação rodar um executável em modo hidden, que irá disparar (executar) os comandos sql dentro do seu script SQL padrão.

    Para atualizar é fácil.
    Crie uma tabela no banco de uso de vocês. Tipo "Application_Information" ou seja la como for o nome
    Nela, guarde o ULTIMO CÓDIGO DE ATUALIZAÇÃO (esse código será gerado por você)

    Você terá apenas um script e irá adicionando as novas alterações SQL no final dele. Sempre antes de um novo bloco de alterações, declare uma variável e defina o código deste bloco

    Por exemplo:

    No inicio do Script, vai o create datatable, certo? Então
    Declare @VERSION Varchar(10)
    Set @Version = '1.1.1.1'

    AQUI VAI A PARTE IMPORTANTE
    IF NOT EXISTS(SELECT VERSAO_SQL FROM APPLICATION_INFORMATION WHERE VERSAO_SQL = @Version)
    BEGIN
    Create database bla bla bla bla bla bla

    EEEE NAO PODE ESQUECER
    INSERT INTO APPLICATION_INFORMATION (VERSAO_SQL) VALUES (@VERSION)
    END

    AI VAI PRO PRÓXIMO BLOCO, QUE VOCÊ PRECISOU FAZER ALTERAÇÕES NA TABELA
    Declare @VERSION Varchar(10)
    Set @Version = '1.1.1.2'   VIU QUE A VERSÃO FINAL MUDOU CERTO? DESSA FORMA, ELE GARANTE QUE SÓ VAI RODAR O SCRIPT DO QUE NUNCA FOI EXECUTADO
    POIS NO FINAL DE CADA BLOCO, TEM UM INSERT DAQUELA VERSAO

    IF NOT EXISTS(SELECT VERSAO_SQL FROM APPLICATION_INFORMATION WHERE VERSAO_SQL = @Version)
    BEGIN
    ALTER TABLE PQ AGORA TEM O CAMPO BLA BLA BLA BLA
    MAIS UMA VEZ, ATUALIZA A TABELA APPLICATION_INFORMATION
    INSERT INTO APPLICATION_INFORMATION(VERSAO_SQL) VALUES (@VERSION)
    END


    Deu pra entender? Desculpe se não fui claro no exemplo!
    Boa sorte
    sexta-feira, 21 de agosto de 2009 04:30
  • Boa noite Leandro,


               
    Tenho uma dúvida o que seria executável em modo hidden?

    sexta-feira, 21 de agosto de 2009 04:41
  • Um aplicativo qualquer que tem como funçãoa disparar comandos do banco. na verdade, nada mais é que um executável normal que vai abrir o arquivo sql e executar, porém no instalador deve estar definido como hidden, apenas para nao aparecer executando. Para que o instalador rode ele de forma oculta. Isso é uma propriedade que pode ser definida nas configurações do projeto de instalação.
    sexta-feira, 21 de agosto de 2009 04:43
  • Boa noite Leandro,

               

                Ok Leandro, entendi sim a sua explicação e por sinal muito bom mesmo.

               

    Tenho outra dúvida, o SQL 2005 gera sozinho o script da tabela usando a ferramenta Management certo.

     

    Pergunta:

     

    Estou pensando em simplesmente gerar o script da tabela inteira com os campos novos usando o Management.

     

    Com esse script já gerado que não é pequeno aí sim eu posso rodar no banco antigo para ficar igual ao novo? Ou tenho que fazer na mão mesmo?

    sexta-feira, 21 de agosto de 2009 04:51
  • Esse script está ok! Na verdade, eu considero a forma mais correta de fazer pois o sql já irá detectar possíveis relacionamentos, excluir e recrialos sempre que necessário.
    Você pode ir gerando pelo management normalmente, e ir adicionando ao seu script! O Controlador de versão serve apenas para você não executar a mesma coisa duas vezes e garantir q todos os seus clientes tenham todas as alterações.

    :) Precisando é só perguntar

    abraços, e vote como útil se ajudou, ou marque como resposta se respondeu
    sexta-feira, 21 de agosto de 2009 04:57
  • Mais uma dúvida só Leandro.

     

    Dados reais da empresa hoje.

     

    Temos 72 tabelas no banco de dados.

    Posso gerar um só script de todo o banco que vai ser bem grande certo. Ao invés de gerar vários scripts de várias tabelas alteradas.

     

    Logo em seguida o executável responsável roda toda a script de uma só vês?

     

    Dessa maneira também vai funciona?

    sexta-feira, 21 de agosto de 2009 05:06
  • Sim, mas de preferência faça de uma maneira que consiga transacionar as alterações

    Begin Transaction, Commit Transaction

    se em algum momento der erro, rollback transaction e aborta a operação
    acredito ser o melhor para garantir os dados seguros.

    abraços
    sexta-feira, 21 de agosto de 2009 05:22
  • Obrigado Leandro pela solução do nosso problema.

                Semana que vem já começaremos a seguir as recomendações.

    Abraços.

     

    sexta-feira, 21 de agosto de 2009 05:23