tipo - modificar una tabla en sql server 2012
SQL Server 2008: las columnas en la tabla no coinciden con una clave primaria existente o una restricción única (10)
Necesito hacer algunos cambios en una base de datos de SQL Server 2008.
Esto requiere la creación de una nueva tabla y la inserción de una clave externa en la nueva tabla que hace referencia a la clave principal de una tabla ya existente. Así que quiero establecer una relación entre mi nuevo tblTwo, que hace referencia a la clave principal de tblOne.
Sin embargo, cuando intenté hacer esto (a través de SQL Server Management Studio) obtuve el siguiente error:
Las columnas en la tabla ''tblOne'' no coinciden con una clave primaria existente o restricción UNIQUE
No estoy realmente seguro de qué significa esto, y me preguntaba si había alguna forma de evitarlo.
Este error sucedió conmigo When
intenté add foreign key
restricción de add foreign key
partir de la PrimaryKey Table
Simpy va a otra tabla y create this foreign key
restricción de create this foreign key
from
allí (foreign key Table)
Este problema me llamó la atención, estaba agregando la relación en la tabla incorrecta. Entonces, si está intentando agregar una relación en la tabla A a la tabla B, intente agregar la relación en la tabla B a la tabla A.
Esto significa que la clave principal en tblOne no se ha declarado correctamente; debe ir a tblOne y agregar la restricción PRIMARY KEY nuevamente.
Si está seguro de que tblOne tiene una restricción de CLAVE PRINCIPAL, entonces quizás haya varias tablas de tblOne en su base de datos, que pertenezcan a diferentes esquemas, y la cláusula de sus referencias en su restricción FK está escogiendo la incorrecta.
Si hay una clave compuesta (que su comentario indicaría), entonces también debe incluir ambas columnas en su referencia de clave externa. Tenga en cuenta que una tabla no puede tener varias claves principales, pero si tiene una clave compuesta, verá un símbolo de clave junto a cada columna que forma parte de la clave principal.
He encontrado otra manera de obtener este error. Esto también puede suceder si intenta hacer una clave externa recursiva (una clave externa a la clave principal en la misma tabla) en la vista de diseño en SQL Management Studio. Si aún no ha guardado la tabla con la clave principal, devolverá este mensaje. Simplemente guarde la tabla y le permitirá crear la clave externa.
He encontrado que los nombres de columna deben coincidir.
Ejemplo: Entonces, si tblOne tiene un id llamado categoryId, una referencia en tblTwo también debe llamarse categoryId.
_tblname, primary key name, foreign key_
tblOne, "categoryId", none
tblTwo, "exampleId", "categoryId"
Noté esto al intentar crear una clave foránea entre 2 tablas que ambas tenían el nombre de columna "id" como clave principal.
He tenido esta situación que me llevó a este tema. Mismo error pero otra causa. Tal vez ayude a alguien.
Table1
ColA (PK)
ColB (PK)
ColC
Table2
ID (PK)
ColA
COLB
Al intentar crear una clave externa en la Tabla 2, he elegido los valores del cuadro combinado en orden inverso
Table1.ColB = Table2.ColB
Table1.ColA = Table2.ColA
Esto me estaba lanzando un error como en el nombre del tema. Al crear FK manteniendo el orden de las columnas en la tabla de claves primarias tal como están, el error desapareció.
Estúpido, pero .. :)
Parece que está intentando crear una clave foránea en tblTwo que no coincide (o no participa) con ninguna clave principal o índice único en tblOne.
Consulte este enlace en MSDN respecto. Aquí tienes otro enlace con un caso práctico .
EDITAR:
Respondiendo a su comentario, entiendo que quiere decir que hay 2 campos en la clave principal (lo que lo convierte en un compuesto). En SQL no es posible tener 2 claves primarias en la misma tabla.
En mi humilde opinión, un campo de clave externa siempre debe referirse a un solo registro en la tabla a la que se hace referencia (es decir, la clave principal completa en su caso). Eso significa que debe colocar ambos campos de la clave primaria tblOne en tblTwo antes de crear la clave externa.
De todos modos, he investigado un poco a través de Internet y parece que SQL Server 2008 (como algunas versiones anteriores y otras RDBMS) le brinda la posibilidad de hacer referencia solo a una parte de la clave principal siempre que esta parte sea una clave candidata (no nula y Único) y creas una restricción única en él.
No estoy seguro de que pueda usar eso en su caso, pero consulte este link para obtener más información al respecto.
Si nada ayuda, entonces este podría ser el motivo: Considerando este caso: Tabla A: Columna 1 (Clave principal) Columna 2 (Clave principal) Columna 3 Columna 4
Tabla B: Columna a (Clave principal) Columna b Columna c
Cuando está definiendo una dependencia de B a A, entonces se ve obligado a respetar el orden en que se definen las primarias.
Eso significa que su dependencia debe verse así: Tabla A Tabla B Columna 1 Columna b Columna 2 Columna c
Y NO: Tabla A Tabla B Columna 2 Columna c Columna 1 Columna b
entonces esto conducirá al error que está encontrando.
Si sigue recibiendo ese error después de haber seguido todos los consejos de las respuestas anteriores y todo se ve bien.
Una forma de solucionarlo es eliminando sus claves principales para ambas tablas, guardar, actualizar y agregarlas nuevamente. Luego trata de agregar tu relación de nuevo.
Si tiene una clave compuesta, el orden es importante al crear un FK y, a veces, el orden no es como se muestra.
Lo que hago es ir a la sección Claves de la tabla1 y seleccionar la clave principal del script como crear en el portapapeles y luego crear FK usando el orden que se muestra en el script