none
Adicionar Colunas em uma Tabela

    Question

  • Olá Colegas!

     

    Como faço para adicionar uma coluna em uma tabela em uma coluna especifica.

     

    Exemplo:

     

    Tenho uma tabela com as colunas A, B, C e quero adicionar uma nova coluna antes do B, então ficaria assim:

    A, D, B, C.

     

    Desde já obrigado pela ajuda.

     

    Henrique Palato

    Monday, December 10, 2007 9:23 PM

All replies

  • Boa Noite,

     

    Quando estruturamos uma tabela, de alguma forma, dentro dos arquivos do banco de dados todas as linhas daquela tabela estão armazenadas. Elas foram armazenadas considerando exatamente as colunas da tabela.

     

    Ao criar uma nova coluna, o banco de dados terá que adicioná-la à estrutura já existente. Essa tarefa pode ser dispendiosa, mas não é necessário eliminar toda a estrutura existente e reconstruí-la.

     

    Se você desejar mudar a ordem das colunas, teremos que alterar os bits e bytes e a forma como as colunas de cada registro lá estão armazenadas. Nesse caso, teríamos que reconstruir a tabela para conseguir fazer isso.

     

    Por essa razão que não será possível alterar a ordem das colunas. Se você o fizer por uma ferramenta gráfica, você estará reconstruindo a tabela da mesma forma.

     

    A menos que você tenha uma aplicação pouco flexível e (ou) esteja um pouco curioso, a ordem das colunas não deve afetar o funcionamento do banco de dados e nem das aplicações se os INSERTs são feitos corretamente, ou seja, especificando-se a relação de campos.

     

    [ ]s,

     

    Gustavo

    Monday, December 10, 2007 10:33 PM
    Moderator
  •  

    Henrique,

     

    Concordo com o Gustavo.

     

    No Enterprise Manager ou Management Studio, quando fazemos este tipo de alteração, temos a opção de gerar script do que será aplicado.

     

    Neste script podemos ver claramente que é feita a criação de uma nova tabela com nome temporário, então são inseridos todos dados da tabela atual nesta nova tabela, depois a tabela original é excluída, por final a nova tabela é renomeada para o nome antigo e adicionados os relacionamentos que existiam inicialmente.

     

    Tudo isso pode ser feito manualmente, sem problema algum, mas, nestes ambientes gráficos tudo é feito automaticamente.

     

     

    Abraço

    Tuesday, December 11, 2007 3:13 AM
  • Henrique,

     

    Concordo plenamente com os colegas Alexandre e Gustavo, mas gostaria de expor a minha opinião.

     

    Inicialmente quando modelamos uma ou mais tables, estamos informando para o SQL Server que este novo objeto deverá ocupar uma área de armazenamento físico dentro do banco de dados ao qual este objeto irá pertencer, sendo assim, todo objeto possui atributos que definim sua estrutura como também informações que poderam ajudar no momento de uma execução de alguma transação.

     

    As tables são compostas por colunas definidas por um nome, mas internamente o SQL Server armazena um código para cada coluna, sendo um valor, inteiro seqüêncial dentro da própria table, mas especifica para cada coluna, se você deseja alterar a ordem das colunas, isso obriga o SQL Server a reprocessar toda esta seqüência númerica para reorganizar as estrutura física e lógica da table, como também os vínculos(relacionamentos) que possam existir sofreram alteração.

     

    Por isso, se existir dados na sua table, com certeza este processo vai consumir muitos recursos da sua máquina, por questões de performance e até mesmo segurança das informações, é aconselhavél fazer este tipo de alteração em uma table vazia, ou até mesmo criar uma nova table de acordo, e depois exportar somente os dados para esta nova table.

    Tuesday, December 11, 2007 10:30 AM
  • Oi gente, concordo com tudo o que vcs apresentaram, porem em determinada fase do "projeto", pode-se sim alterar e mover a nova tabela para onde quiser.
    Exemplo disso sao os comandos do SQL:


    ALTER TABLE (nome da tabela)
    ADD (nome da nova coluna) (variavel a ser usada)
    AFTER (nome da coluna na qual vc quer que a nova apareça logo após);

    Tuesday, March 03, 2009 7:39 PM
  • Boa Noite,

    Os comandos propostos não são ANSI Compliance e não funcionam no TSQL.
    Imagino que sua solução seja baseada em MySQL. Se for não funcionará no SQL Server.

    Concordo que a necessidade de reordenar seja válida, mas teoricamente a questão da ordem não deveria ser um impecilho. Mesmo que seja possível, o movimento de reconstrução deve acontecer.

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.spaces.live.com

    E se Chuck Norris fosse um DBA ? (Versão SQL Server)
    http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!392.entry
    Classifique as respostas. O seu feedback é imprescindível
    Tuesday, March 03, 2009 10:06 PM
    Moderator