none
Adicionar chave estrangeira (not null) RRS feed

  • Pergunta

  • Saudações a todos!

     

          Gostaria de saber como devo fazer para inserir un novo campo em uma tabela ja existente. Este novo campo deverá ser uma chave estrangeira não nula. Mas o detalhe é que ja possuo dados nessa tabela. Existe uma forma de manter essa integridade e também manter meus dados existentes?

     

    Obrigado!

    sexta-feira, 22 de fevereiro de 2008 14:47

Respostas

  • Boa Tarde AnCoelho,

     

    Seja bem vindo ao fórum SQL Server do MSDN. Tentaremos com nossa experiência e conhecimento auxiliá-lo na resolução de seus problemas e esclarescimento de suas dúvidas.

     

    Toda vez que uma coluna é adicionada a uma tabela com dados ela deverá ser colocada como NULL. Só é possível colocá-la como NOT NULL caso a mesma ainda não possua dados. Caso você precise criar uma coluna NOT NULL em uma tabela que já possui dados, você deverá colocar um valor padrão (DEFAULT) para que a mesma seja preenchida. Ex:

     

    Code Snippet

    CREATE TABLE #tbl (CODIGO1 INT NOT NULL)

     

    INSERT INTO #tbl (CODIGO1) VALUES (1)

    INSERT INTO #tbl (CODIGO1) VALUES (2)

    INSERT INTO #tbl (CODIGO1) VALUES (3)

    INSERT INTO #tbl (CODIGO1) VALUES (4)

     

    -- Será gerado um erro

    ALTER TABLE #tbl ADD CODIGO2 INT NOT NULL

    -- O campo é criado e preenchido

    ALTER TABLE #tbl ADD CODIGO2 INT NOT NULL DEFAULT 1

     

    SELECT * FROM #tbl

     

    DROP TABLE #tbl

     

     

    Se você puder colocar um valor default para sua FK, essa solução poderá ser adotada. Caso isso não possa ser feito, você deverá colocar a coluna como NULL. Se utilizar o DEFAULT, lembre-se de excluí-lo caso o mesmo não seja necessário.

     

    [ ]s,

     

    Gustavo

    sexta-feira, 22 de fevereiro de 2008 17:28

Todas as Respostas

  • Olá,

     

    É recomendável que você adicione o campo, depois preencha-o com os valores e no final coloque a restrição. Como o exemplo:

     

    -- adicionar o campo

    alter table tabela add OutroCampo int foreign key references tabela2(Campo)

    -- preencha os valores do campo OutroCampo

    -- adicionar a restrição

    alter table tabela

    alter column OutroCampo int not null

     

    []s

    sexta-feira, 22 de fevereiro de 2008 17:12
  • Boa Tarde AnCoelho,

     

    Seja bem vindo ao fórum SQL Server do MSDN. Tentaremos com nossa experiência e conhecimento auxiliá-lo na resolução de seus problemas e esclarescimento de suas dúvidas.

     

    Toda vez que uma coluna é adicionada a uma tabela com dados ela deverá ser colocada como NULL. Só é possível colocá-la como NOT NULL caso a mesma ainda não possua dados. Caso você precise criar uma coluna NOT NULL em uma tabela que já possui dados, você deverá colocar um valor padrão (DEFAULT) para que a mesma seja preenchida. Ex:

     

    Code Snippet

    CREATE TABLE #tbl (CODIGO1 INT NOT NULL)

     

    INSERT INTO #tbl (CODIGO1) VALUES (1)

    INSERT INTO #tbl (CODIGO1) VALUES (2)

    INSERT INTO #tbl (CODIGO1) VALUES (3)

    INSERT INTO #tbl (CODIGO1) VALUES (4)

     

    -- Será gerado um erro

    ALTER TABLE #tbl ADD CODIGO2 INT NOT NULL

    -- O campo é criado e preenchido

    ALTER TABLE #tbl ADD CODIGO2 INT NOT NULL DEFAULT 1

     

    SELECT * FROM #tbl

     

    DROP TABLE #tbl

     

     

    Se você puder colocar um valor default para sua FK, essa solução poderá ser adotada. Caso isso não possa ser feito, você deverá colocar a coluna como NULL. Se utilizar o DEFAULT, lembre-se de excluí-lo caso o mesmo não seja necessário.

     

    [ ]s,

     

    Gustavo

    sexta-feira, 22 de fevereiro de 2008 17:28
  •  

    Muito obrigado Gustavo!

     

    Foi de grande valia para o meu trabalho a sua ajuda.

     

    Abraços

    sexta-feira, 22 de fevereiro de 2008 18:24