Tenho um problema ao tentar adicionar uma chave estrangeira à minha tblDomare
tabela; O que eu estou fazendo errado aqui?
CREATE TABLE tblDomare
(PersNR VARCHAR (15) NOT NULL,
fNamn VARCHAR (15) NOT NULL,
eNamn VARCHAR (20) NOT NULL,
Erfarenhet VARCHAR (5),
PRIMARY KEY (PersNR));
INSERT INTO tblDomare (PersNR,fNamn,eNamn,Erfarenhet)
Values (6811034679,'Bengt','Carlberg',10);
INSERT INTO tblDomare (PersNR,fNamn,eNamn,Erfarenhet)
Values (7606091347,'Josefin','Backman',4);
INSERT INTO tblDomare (PersNR,fNamn,eNamn,Erfarenhet)
Values (8508284163,'Johanna','Backman',1);
CREATE TABLE tblBana
(BanNR VARCHAR (15) NOT NULL,
PRIMARY KEY (BanNR));
INSERT INTO tblBana (BanNR)
Values (1);
INSERT INTO tblBana (BanNR)
Values (2);
INSERT INTO tblBana (BanNR)
Values (3);
ALTER TABLE tblDomare
ADD FOREIGN KEY (PersNR)
REFERENCES tblBana(BanNR);
Mensagem de erro:
A instrução ALTER TABLE entra em conflito com a restrição FOREIGN KEY "FK_ tblDomare _PersN__5F7E2DAC". O conflito ocorreu no banco de dados "almu0004", tabela "dbo.tblBana", coluna 'BanNR'.
sql
sql-server
database
user3162932
fonte
fonte
Esta consulta foi muito útil para mim. Mostra todos os valores que não têm correspondências
fonte
Experimente esta solução:
fonte
É possível criar a chave estrangeira usando o nome da tabela ALTER TABLE WITH NOCHECK ..., que permitirá dados que violam a chave estrangeira.
"ALTER TABLE tablename WITH NOCHECK ..." opção para adicionar o FK - Esta solução funcionou para mim.
fonte
@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.DETACH) @JoinTable(name = "tbUsuariosTipoOcorrencia", joinColumns = { @JoinColumn(name = "idUsuario") }, inverseJoinColumns = { @JoinColumn(name = "idTipoOcorrencia") })
e eu fiz isso resolver via query de banco de dados:alter table tbUsuariosTipoOcorrencia WITH NOCHECK add constraint FKnbxg3ua7b8c5d53wps69q6jh foreign key (idUsuario) references tbUsuarios
Eu acho que um valor de coluna em uma tabela de chave estrangeira deve corresponder ao valor da coluna da tabela de chave primária. Se estamos tentando criar uma restrição de chave estrangeira entre duas tabelas em que o valor dentro de uma coluna (que será a chave estrangeira) é diferente do valor da coluna da tabela de chave primária, ele emitirá a mensagem.
Portanto, é sempre recomendável inserir apenas os valores na coluna Chave estrangeira que estão presentes na coluna Tabela da chave primária.
Por ex. Se a coluna da tabela Primária tiver valores 1, 2, 3 e na coluna Chave Externa os valores inseridos forem diferentes, a consulta não será executada, pois espera que os valores estejam entre 1 e 3.
fonte
Antes de adicionar chave estrangeira à tabela, faça o seguinte
Se a tabela contiver não vá para o design e a alteração, faça-o manualmente.
alterar tabela Tabela 1 adicionar referências de chave estrangeira (nome da coluna) Tabela 2 (nome da coluna)
alterar tabela Tabela 1 atributo da coluna Alterar nome da coluna não nulo
fonte
Limpe seus dados de suas tabelas e faça uma relação entre eles.
fonte
Experimente
DELETE
os dados atuais detblDomare.PersNR
. Porque os valores emtblDomare.PersNR
não coincidem com nenhum dos valores emtblBana.BanNR
.fonte
Eu também tive esse erro, pois Smutje se referiu. Certifique-se de que você não tenha um valor na coluna de chave estrangeira da sua tabela de chave estrangeira de base que não esteja na sua tabela de referência, ou seja, (todo valor na tabela de chave estrangeira de base (valor de uma coluna que seja chave estrangeira) também deve estar na coluna da tabela de referência) é bom esvaziar sua tabela de chaves estrangeiras de base primeiro e depois definir chaves estrangeiras
fonte
os dados que você inseriu em uma tabela (tbldomare) não correspondem aos dados que você atribuiu à tabela de chave primária. escreva entre tbldomare e adicione esta palavra (com nocheck) e depois execute seu código.
por exemplo, você inseriu uma tabela para marcar esses dados
e você atribuiu uma
foreign key
tabela para aceitar apenas1,2,3
.você tem duas soluções: uma é excluir os dados inseridos em uma tabela e executar o código. outra é escrever esta palavra (com nocheck) coloque-a entre o nome da sua tabela e adicione assim
fonte
Isso acontece comigo, como estou projetando meu banco de dados, noto que altero minha semente na minha tabela principal, agora a tabela relacional não tem chave estrangeira na tabela principal.
Então, eu preciso truncar as duas tabelas, e agora funciona!
fonte
Você deve ver se suas tabelas possuem algum dado nas linhas. Se "sim", então você deve truncar a tabela (s), ou então você pode torná-los a ter o mesmo número de dados a
tblDomare.PersNR
quetblBana.BanNR
e vice-versa.fonte
Smutje está correto e Chad HedgeCock ofereceu um ótimo exemplo de leigo. Eu gostaria de aproveitar o exemplo do Chade, oferecendo uma maneira de encontrar / excluir esses registros. Usaremos o Cliente como pai e o pedido como filho. CustomerId é o campo comum.
se você estiver lendo este tópico ... obterá resultados. São crianças órfãs. selecione * de Filho do Pedido deixado ingressar no Cliente Pai em Child.CustomerId = Parent.CustomerId em que Parent.CustomerId é nulo Observe a contagem de linhas no canto inferior direito.
Vá verificar com quem quer que você queira excluir essas linhas!
Execute o primeiro bit. Verifique se a contagem de linhas = o que você esperava
comprometer o tran
Seja cuidadoso. A programação desleixada de alguém colocou você nessa bagunça. Certifique-se de entender o porquê antes de excluir os órfãos. Talvez o pai precise ser restaurado.
fonte
No meu cenário, usando EF, ao tentar criar essa nova chave estrangeira nos dados existentes, eu estava tentando preencher os dados incorretamente (criar os links) APÓS a criação da chave estrangeira.
A correção é preencher seus dados antes de criar a chave estrangeira, uma vez que verifica todos eles para ver se os links são realmente válidos. Portanto, não poderia funcionar se você ainda não o tiver preenchido.
fonte
Encontro algum problema no meu projeto.
Na tabela filho, não há nenhum ID de registro igual a 1 e 11
Inseri a tabela DEAL_ITEM_THIRD_PARTY_PO cujo ID é igual a 1 e 11, para que eu possa criar FK
fonte
Primeiro, exclua os dados dessa tabela e execute a migração novamente. Você terá sucesso
fonte
Quando você define uma chave estrangeira na tabela B, referenciando a chave primária da tabela A, significa que quando um valor está em B, ele deve estar em A. Isso evita modificações inconsistentes nas tabelas.
No seu exemplo, suas tabelas contêm:
tblDomare com
PRIMARY KEY (PersNR)
:tblBana:
Esta afirmação:
diz que qualquer linha
tblDomare
com chavePersNR
deve ter uma correspondência na tabelatblBana
na chaveBanNR
. Seu erro é porque você tem linhas inseridastblDomare
sem correspondência emtblBana
.2 soluções para corrigir seu problema: - adicione linhas
tblBana
com oBanNR in (6811034679, 7606091347, 8508284163) - or remove all lines in
tblDomarethat have no correspondance in
tblBana` (mas sua tabela estaria vazia)Conselho geral : você deve ter a restrição de chave estrangeira antes de preencher as tabelas. As chaves estrangeiras estão aqui para impedir que o usuário da tabela preencha as tabelas com inconsistências.
fonte
e apenas para sua informação, caso você faça todas as suas verificações de referência de dados e não encontre dados ruins ... aparentemente não é possível criar uma restrição de chave estrangeira entre duas tabelas e campos em que esses campos são a chave primária em ambas as tabelas! Não me pergunte como eu sei disso.
fonte