none
Mudar campo float para int e adicionar chave primaria RRS feed

  • Pergunta

  • Boa tarde pessoal !

    Alguém saberia me dizer como mudo um campo float para int e esse mesmo campo passara a ser chave primaria .

    tentei fazer pela interface mas como a tabela ja tem 30 mil registros nao consigo... esse campo que quero mudar eh uma campo chamado código ou seja ele eh único e nunca se repete mas eu recebo esse dados em excel e quando importo ele vai pra o sqlserver como float mesmo antes de importar eu ir la no excel e mudar para numero e etc.

    Obrigado pela atencao!

    sábado, 10 de março de 2012 15:13

Respostas

  • Rafael,

    você pode usar o "ALTER COLUMN" para alterar o tipo de dados da sua coluna. É importante notar que ao converter para o tipo inteiro os valores "quebrados" serão convertidos para inteiros, por exemplo, 3,55 vai se tornar 3 na nova coluna, logo, se você tiver duas linhas na sua planilha com os códigos 4 e 4,75 por exemplo, você não conseguirá criar a chave primária, pois as duas linhas terão o mesmo valor, no caso 4, após a conversão para o tipo int.

    Segue script para teste.

    create table Teste (Codigo Float)
    GO

    -- Insere 30 mil registros na tabela
    Insert into Teste values(1.00)
    Insert into Teste values(2.00)
    Insert into Teste values(3.55)
    go 10000

    -- Verifica os dados
    select * from Teste

    -- Altera o tipo da coluna para int
    alter table Teste Alter Column Codigo Int
    GO

    -- Verifica os dados após a alteração do tipo da coluna
    select * from Teste
    GO

    drop table Teste


    Espero que ajude! Luiz Phellipe


    • Sugerido como Resposta Luiz Phellipe sábado, 10 de março de 2012 19:25
    • Editado Luiz Phellipe sábado, 10 de março de 2012 19:33
    • Marcado como Resposta Eder Costa terça-feira, 13 de março de 2012 13:18
    sábado, 10 de março de 2012 19:24

Todas as Respostas

  • Mas olha só: dentre esses 30 mil registros, existe algum código que não seja inteiro? Pois se existir um código que seja, não será possível mudar o tipo para int. Exemplo: Se um dos códigos for 45.78, isso inviabilizará a mudança de tipo. 

    Você pode excluir a chave desse campo e, em seguida, tentar mudar para int. Se o SQL apresentar erro, provavelmente será um erro devido a este motivo (valores que não condizem com o tipo int).

    Porém, se o SQL conseguir alterar o tipo de dados, basta recriar a chave depois.

    Quanto a importar do excel e já vir como float, pode ser que seja justamente por ter algum conteúdo float. Você pode experimentar fazer a exportação para uma tabela temporária na qual o campo código já poderá ser do tipo int.


    Roberson Ferreira - Database Developer
    Acesse: www.robersonferreira.com.br
    Email: contato@robersonferreira.com.br

    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    sábado, 10 de março de 2012 17:56
    Moderador
  • Rafael,

    você pode usar o "ALTER COLUMN" para alterar o tipo de dados da sua coluna. É importante notar que ao converter para o tipo inteiro os valores "quebrados" serão convertidos para inteiros, por exemplo, 3,55 vai se tornar 3 na nova coluna, logo, se você tiver duas linhas na sua planilha com os códigos 4 e 4,75 por exemplo, você não conseguirá criar a chave primária, pois as duas linhas terão o mesmo valor, no caso 4, após a conversão para o tipo int.

    Segue script para teste.

    create table Teste (Codigo Float)
    GO

    -- Insere 30 mil registros na tabela
    Insert into Teste values(1.00)
    Insert into Teste values(2.00)
    Insert into Teste values(3.55)
    go 10000

    -- Verifica os dados
    select * from Teste

    -- Altera o tipo da coluna para int
    alter table Teste Alter Column Codigo Int
    GO

    -- Verifica os dados após a alteração do tipo da coluna
    select * from Teste
    GO

    drop table Teste


    Espero que ajude! Luiz Phellipe


    • Sugerido como Resposta Luiz Phellipe sábado, 10 de março de 2012 19:25
    • Editado Luiz Phellipe sábado, 10 de março de 2012 19:33
    • Marcado como Resposta Eder Costa terça-feira, 13 de março de 2012 13:18
    sábado, 10 de março de 2012 19:24