none
Migração de banco de dados RRS feed

  • Pergunta

  • Boa tarde Galera.

     

    Sou novo no forum e tenho uma dúvida.

    Estou mgrando um banco de dados do Firebird para o SQL server 2008.

    Ja migrei, procedures, view e  tabelas com um migrador que migra normalmente, porém não cria o campo IDENTITY, já que no Firebird se trabalha com GENERATOR.

    Minha dúvida é em relação aos campos IDENTITY das tabelas do banco de dados. Não consigo implementar nos devidos campos como IDENTITY, nem via código...

    ALTER TABLE ATIVIDADES ALTER COLUMN CODATIVIDADE VARCHAR(7) IDENTITY[1,1] PRIMARY KEY

    ... e nem via Studio SQL SERVER.

    Como procedo ?

    Terei que criar novas tabelas na mão e popular elas novamente? Se sim, 'não adianta migrar tabelas de um banco para outro'

    Alguém tem alguma opinião??

    Atenciosamente.

     

    • Movido Gustavo Maia Aguiar quarta-feira, 1 de fevereiro de 2012 15:33 (De:SQL Server - Desenvolvimento Geral)
    quarta-feira, 1 de fevereiro de 2012 14:24

Respostas

  • Boa Tarde,

    Não é possível alterar uma coluna para Identity e nem retirar o Identity. Você terá que criar as tabelas já com o Identity ou fazer as alterações pela interface gráfica.

    [ ]s,

    Gustavo Maia Aguiar
    Blog: http://gustavomaiaaguiar.wordpress.com
    Vídeos: http://www.youtube.com/user/gmasql


    Classifique as respostas. O seu feedback é imprescindível
    quarta-feira, 1 de fevereiro de 2012 15:33
  • Belozi,

    O Gustavo esta certo, a partir do momento em que você possui uma tabela já criada e necessita criar um mecanismo de autonumeração, através da propriedade Identity não é possível.

    Em uma tabela com o Identity em uso o que você pode fazer é interromper o uso do Identity através da Diretiva Set Identity_ON ou Set Identity_Off, estabelecendo ou não uma nova sequência numérica, quebrando a sequência que esta em uso.

    O que poderia ser feito como também o Gustavo destacou criar uma nova table como Identity e com base nisso fazer a população desta nova table com os dados da tabela atual.

    Agora talvez uma outra possibilidade seria utilizar a função de Ranking, chamado Row_Number() que possibilita obter o número da linha de cada registro e isso poderia ser uma forma de gerar uma numeração dentro da sua própria table.


    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]
    quarta-feira, 1 de fevereiro de 2012 23:06
    Moderador

Todas as Respostas

  • Boa Tarde,

    Não é possível alterar uma coluna para Identity e nem retirar o Identity. Você terá que criar as tabelas já com o Identity ou fazer as alterações pela interface gráfica.

    [ ]s,

    Gustavo Maia Aguiar
    Blog: http://gustavomaiaaguiar.wordpress.com
    Vídeos: http://www.youtube.com/user/gmasql


    Classifique as respostas. O seu feedback é imprescindível
    quarta-feira, 1 de fevereiro de 2012 15:33
  • Belozi,

    O Gustavo esta certo, a partir do momento em que você possui uma tabela já criada e necessita criar um mecanismo de autonumeração, através da propriedade Identity não é possível.

    Em uma tabela com o Identity em uso o que você pode fazer é interromper o uso do Identity através da Diretiva Set Identity_ON ou Set Identity_Off, estabelecendo ou não uma nova sequência numérica, quebrando a sequência que esta em uso.

    O que poderia ser feito como também o Gustavo destacou criar uma nova table como Identity e com base nisso fazer a população desta nova table com os dados da tabela atual.

    Agora talvez uma outra possibilidade seria utilizar a função de Ranking, chamado Row_Number() que possibilita obter o número da linha de cada registro e isso poderia ser uma forma de gerar uma numeração dentro da sua própria table.


    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]
    quarta-feira, 1 de fevereiro de 2012 23:06
    Moderador
  • Certo galera.

    Pelo Studio do SQL server, consegui alterar para IDENTITY os campos que precisava, só aconteceu um porém.

    Os campos primarios, inteiros, consegui coloca-los como IDENTITY através do Studio.

    O problema agora é que em algumas tabelas tenho mais de uma chave primária e algumas delas não são inteiras, são varchar por exemplo. Logo não é possível alterar para IDENTITY, já que está propriedade só atende inteiros, "mais do que lógico".

    Se alguem tiver alguma opinião á respeito.

    Imaginem que tenho uma tabela que precisa de IDENTITY, porém seu unico campo primário e varchar, qual melhor solução. Criar um outro campo como inteiro e altera-lo para IDENTITY ?e os registros ja populados como inserir codigo á eles, caso criasse o campo inteiro como informado?

    Qualquer dica, será muito bem vinda !

    Abraco á todos.

     

     

     

    sábado, 4 de fevereiro de 2012 12:50
  • Belozi,

    Cara crie uma nova tabela com a mesma estrutura acrescentando o identity em um campo inteiro, posteriormente, realize um simples Insert Into...Select migrando os dados de uma tabela para outro, deixe que o próprio SQL Server realize a numeração.


    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]
    domingo, 5 de fevereiro de 2012 12:45
    Moderador
  • Obrigado Junior.

    Farei isso, assim que possível, obrigado á todos pelas respostas.

    Parabens para o fórum, não mais sairei dele. rs

    Abraço.

     


    Lenon Carvalho Belozi Técnico em Informática Cursando Sistemas de Informação UFJF
    segunda-feira, 6 de fevereiro de 2012 10:39
  • Boa tarde galera.

    Estou com um problema quanto a migração. Recriei as chaves que precisava como IDENTITY, porém tenho uma dúvida.

    Vou popular as tabelas novamente, porém essas já possuiem seus códigos. O SQL Server a partir de então pegara o ultimo COD e o auto incremento se dará a partir dele? Exemplo: Tenho uma tabela produto com 5 produtos:

    COD: 1

    COD: 2

    COD: 6

    COD: 7

    COD: 10

    O SQL na proxima insercao irá inserir o valor 11, ou tentará resgatar o 3 por exemplo, que ja fora apagado no outro banco?

    Como procedo para popular essas tabelas passando os respectivos codigos ja cadastrados que agora serão IDENTITY

    ?


    Lenon Carvalho Belozi Técnico em Informática Cursando Sistemas de Informação UFJF

    quarta-feira, 7 de março de 2012 15:52
  • Obrigado a todos pelas respostas.

    Consegui alterar via studio as tabelas e alteri a semente de identidade para o ultimo cod ja cadastrado, tudo rodadando normal.

    Abracos


    Lenon Carvalho Belozi Técnico em Informática Cursando Sistemas de Informação UFJF

    sábado, 30 de junho de 2012 18:13