Usuário com melhor resposta
Adicionar chave estrangeira (not null)

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!
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 SnippetCREATE
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 1SELECT
* FROM #tblDROP
TABLE #tblSe 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
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 tabelaalter
column OutroCampo int not null[]s
-
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 SnippetCREATE
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 1SELECT
* FROM #tblDROP
TABLE #tblSe 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
-