Tengo un problema al intentar agregar una clave externa a mi tblDomare
tabla; ¿Qué estoy haciendo mal aquí?
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);
Mensaje de error:
La instrucción ALTER TABLE entró en conflicto con la restricción FOREIGN KEY "FK_ tblDomare _PersN__5F7E2DAC". El conflicto ocurrió en la base de datos "almu0004", tabla "dbo.tblBana", columna 'BanNR'.
sql
sql-server
database
usuario3162932
fuente
fuente
Esta consulta fue muy útil para mí. Muestra todos los valores que no tienen coincidencias.
fuente
Prueba esta solución:
fuente
Es posible crear la clave externa utilizando ALTER TABLE tablename WITH NOCHECK ..., que permitirá datos que violen la clave externa.
Opción "ALTER TABLE tablename WITH NOCHECK ..." para agregar el FK: esta solución funcionó para mí.
fuente
@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.DETACH) @JoinTable(name = "tbUsuariosTipoOcorrencia", joinColumns = { @JoinColumn(name = "idUsuario") }, inverseJoinColumns = { @JoinColumn(name = "idTipoOcorrencia") })
y lo resolví a través de una consulta en la base de datos:alter table tbUsuariosTipoOcorrencia WITH NOCHECK add constraint FKnbxg3ua7b8c5d53wps69q6jh foreign key (idUsuario) references tbUsuarios
Supongo que un valor de columna en una tabla de clave externa debe coincidir con el valor de columna de la tabla de clave primaria. Si estamos tratando de crear una restricción de clave externa entre dos tablas donde el valor dentro de una columna (que será la clave externa) es diferente del valor de la columna de la tabla de clave primaria, arrojará el mensaje.
Por lo tanto, siempre se recomienda insertar solo aquellos valores en la columna de clave externa que están presentes en la columna de la tabla de clave primaria.
Por ej. Si la columna de la tabla primaria tiene valores 1, 2, 3 y en la columna de clave externa los valores insertados son diferentes, entonces la consulta no se ejecutará ya que espera que los valores estén entre 1 y 3.
fuente
Antes de agregar una clave externa a la tabla, haga lo siguiente
Si la tabla contiene no vaya a diseñar y cambiar, hágalo manualmente.
alterar tabla Tabla 1 agregar clave externa (Nombre de columna) referencias Tabla 2 (Nombre de columna)
alterar tabla Tabla 1 alterar columna Nombre de columna atributo no nulo
fuente
Limpie sus datos de sus tablas y luego haga una relación entre ellos.
fuente
Pruebe
DELETE
los datos actuales detblDomare.PersNR
. Porque los valores entblDomare.PersNR
no coincidían con ninguno de los valores entblBana.BanNR
.fuente
También tuve este error ya que Smutje se refirió, asegúrese de que no tenga un valor en la columna de clave externa de su tabla de clave externa base que no esté en su tabla de referencia, es decir (cada valor en su tabla de clave externa base (valor de una columna que es clave externa) también debe estar en la columna de la tabla de referencia) es bueno vaciar primero la tabla de clave externa base y luego configurar las claves externas
fuente
los datos que ha ingresado en una tabla (tbldomare) no coinciden con los datos que le ha asignado la tabla de clave primaria. escriba entre tbldomare y agregue esta palabra (con nocheck) luego ejecute su código.
por ejemplo, usted ingresó una tabla tbldomar estos datos
y asignaste una
foreign key
tabla para aceptar solo1,2,3
.tiene dos soluciones, una es eliminar los datos que ha ingresado en una tabla y luego ejecutar el código. otra es escribir esta palabra (con nocheck) ponla entre el nombre de tu tabla y agrega así
fuente
Esto me sucede, ya que estoy diseñando mi base de datos, me doy cuenta de que cambio mi semilla en mi tabla principal, ahora la tabla relacional no tiene una clave externa en la tabla principal.
Entonces necesito truncar ambas tablas, ¡y ahora funciona!
fuente
Debería ver si sus tablas tienen algún dato en las filas. Si "sí", entonces usted debe truncar la tabla (s) o de lo contrario puede hacer que tengan el mismo número de datos a
tblDomare.PersNR
atblBana.BanNR
y tornillo de banco-verso.fuente
Smutje está en lo correcto y Chad HedgeCock ofreció un gran ejemplo de laico. Me gustaría construir sobre el ejemplo de Chad ofreciendo una forma de encontrar / eliminar esos registros. Usaremos al Cliente como el Padre y el Pedido como el niño. CustomerId es el campo común.
si estás leyendo este hilo ... obtendrás resultados. Estos son niños huérfanos. seleccione * del Pedido Hijo izquierdo unirse al Cliente Principal en Child.CustomerId = Parent.CustomerId donde Parent.CustomerId es nulo Tenga en cuenta el recuento de filas en la parte inferior derecha.
¡Ve a verificar con quien necesites que vas a eliminar estas filas!
Ejecuta el primer bit. Verifique el recuento de filas = lo que esperaba
cometer el tran
Ten cuidado. La programación descuidada de alguien te metió en este lío. Asegúrese de comprender el por qué antes de eliminar a los huérfanos. Tal vez el padre necesita ser restaurado.
fuente
En mi escenario, usando EF, al intentar crear esta nueva clave externa en los datos existentes, estaba tratando de completar los datos (hacer los enlaces) DESPUÉS de crear la clave externa.
La solución es completar sus datos antes de crear la clave externa, ya que los verifica a todos para ver si los enlaces son realmente válidos. Por lo tanto, no podría funcionar si aún no lo ha poblado.
fuente
Me encuentro con algún problema en mi proyecto.
En la tabla secundaria, no hay ningún ID de registro igual a 1 y 11
Inserté la tabla DEAL_ITEM_THIRD_PARTY_PO cuyo Id es igual a 1 y 11, luego puedo crear FK
fuente
Primero elimine los datos de esa tabla y luego vuelva a ejecutar la migración. Obtendrás éxito
fuente
Cuando define una Clave externa en la tabla B que hace referencia a la Clave primaria de la tabla A, significa que cuando un valor está en B, debe estar en A. Esto es para evitar modificaciones inconsistentes en las tablas.
En su ejemplo, sus tablas contienen:
tblDomare con
PRIMARY KEY (PersNR)
:tblBana:
Esta declaración:
dice que cualquier línea
tblDomare
con clavePersNR
debe tener una correspondencia en la tablatblBana
en claveBanNR
. Su error es porque tiene líneas insertadas entblDomare
sin correspondencia entblBana
.2 soluciones para solucionar su problema: agregue líneas
tblBana
conBanNR in (6811034679, 7606091347, 8508284163) - or remove all lines in
tblDomarethat have no correspondance in
tblBana` (pero su tabla estaría vacía)Consejo general : debe tener la restricción de clave externa antes de llenar las tablas. Las claves externas están aquí para evitar que el usuario de la tabla llene las tablas con inconsistencias.
fuente
y solo para su información, en caso de que haga todas sus verificaciones de referencia de datos y no encuentre datos incorrectos ... ¡aparentemente no es posible crear una restricción de clave externa entre dos tablas y campos donde esos campos son la clave principal en ambas tablas! No me preguntes cómo sé esto.
fuente