Si no pudo insertar un nuevo registro en una tabla debido a la restricción de unicidad, no deje de leer este artículo. Te ayudará a resolver este problema.
En este artículo, presentaremos 4 métodos para resolver el problema cuando no puede insertar un nuevo registro porque viola la restricción única de la tabla en SQL Server.
Un caso real:
Ahora veamos un caso real. Tenemos una base de datos llamada "Producto" y hay una tabla llamada "DataNumenProducto ”en la base de datos. Hay dos campos en la tabla, es decir, "ProductId" y "ProductName", con los tipos de datos "int" y "varchar" respectivamente. Y "ProductId" es una clave principal con restricción única.
Actualmente hay algunos registros en la tabla, como se muestra a continuación:
Figura 1 Registros en la tabla "DataNumenProducto"
Suponiendo que hay dos DBA para la base de datos, es decir, Jim y Tom. Un día, Jim eliminó el primer registro de la tabla, como se muestra a continuación:
DELETE FROM DataNumenProduct WHERE ProductId=1;
El segundo día, Tom insertó un nuevo registro en la tabla, que tiene la misma clave principal con el registro eliminado, como se muestra a continuación:
INSERT INTO DataNumenProduct VALUES(1,'DataNumen OutLook Repair');
Entonces, nuestra tabla tiene los siguientes registros, como se muestra a continuación:
Figura 2 Registros actualizados en la tabla "DataNumenProductos ”
Ahora, si Jim quiere restaurar el registro eliminado a la tabla, violará la restricción única de la clave primaria "ProductId". En tal caso, podemos usar una de las soluciones a continuación para resolver el problema.
Solución alternativa 1: modifique la clave principal del nuevo registro para evitar conflictos
Podemos modificar la clave primaria del registro que se insertará a un nuevo valor que sea diferente a los de todos los registros existentes en la tabla. Tome el caso anterior como ejemplo, para que se inserte el registro, podemos modificar el valor de la clave principal de 1 a 5. Luego, podemos restaurar el nuevo registro generado a la tabla, como se muestra a continuación:
INSERT INTO DataNumenProduct VALUES(5, 'DataNumen Access Repair');
A continuación se muestran los registros finales en la tabla:
Figura 3 Registros finales en la tabla “DataNumen Productos ”
Solución alternativa 2: modifique la clave principal del registro existente para evitar conflictos
- Primero, necesitamos actualizar el valor de la clave principal del registro existente que puede causar conflicto, como se muestra a continuación:
UPDATE DataNumenProduct SET ProductId = 6 WHERE ProductId = 1;
A continuación se muestran los registros actualizados en la tabla:
Figura 4 Registros actualizados en la tabla "DataNumen Productos ”
- Luego, podemos restaurar el registro eliminado a la tabla, como se muestra a continuación:
INSERT INTO DataNumenProduct VALUES(1, 'DataNumen Access Repair ');
Ahora veamos la versión final, como se muestra a continuación:
Figura 5 Registros finales en la tabla "DataNumen Productos ”
Solución alternativa 3: deshabilite el tempo de restricción únicorarily a través de SQL
- Para resolver el problema, podemos eliminar la restricción de clave primaria "pk" en el tempo de la tabla.rarily, como se muestra a continuación:
ALTER TABLE DataNumenProduct DROP CONSTRAINT pk;
- Luego, podemos volver a agregar el registro eliminado a la tabla, como se muestra a continuación:
INSERT INTO DataNumenProduct VALUES(1, 'DataNumen Access Repair');
Ahora veamos los registros en la tabla:
Figura 6 Registros actualizados en la tabla "DataNumen Productos ”
- Luego, dado que dos registros tienen los mismos valores de clave principal, debemos modificar uno de ellos para evitar conflictos, como se muestra a continuación:
UPDATE DataNumenProduct SET ProductId = 5 WHERE ProductName = 'DataNumen Outlook Repair';
- Por último, volvemos a agregar la restricción de clave primaria "pk" a la tabla, como se muestra a continuación:
ALTER TABLE DataNumenProduct ADD CONSTRAINT pk PRIMARY KEY(ProductId);
Ahora hay algunos registros en la tabla, como se muestra a continuación:
Figura 7 Contenido actualizado en la tabla "DataNumen Productos ”
Solución alternativa 4: deshabilite el tempo de restricción únicorarily vía SQL Server Estudio de gestión:
- En primer lugar, eliminamos la restricción de clave primaria "pk" en la tabla a través de la GUI, como se muestra a continuación:
Figura 8 Elimine la restricción de clave principal "pk" a través de la GUI
- Luego insertamos el registro eliminado en caso real en la tabla, como se muestra a continuación.
INSERT INTO DataNumenProduct VALUES(1, 'DataNumen Access Repair');
Ahora hay algunos registros en la tabla, como se muestra a continuación:
Figura 9 Contenido actualizado en la tabla "DataNumen Productos ”
- Luego modificamos el valor de la clave principal del registro existente en la tabla, como se muestra a continuación:
UPDATE DataNumenProduct SET ProductId = 5 WHERE ProductName = 'DataNumen Outlook Repair';
- Por último, volvemos a agregar la restricción de clave primaria "pk" a la tabla a través de la GUI, como se muestra a continuación:
Figura 8 Vuelva a agregar la restricción de clave principal "pk" a través de la GUI
Resolver SQL Server Corrupción de la base de datos
Aparte de las restricciones únicas, SQL Server corrupción También es un problema muy común que molesta a los administradores de bases de datos. Normalmente podemos usar SQL Server comandos incorporados para resolver las corrupciones. Sin embargo, si no funcionan, entonces podemos recurrir a algún tercero SQL Server herramientas de recuperación de datos.
Introducción del autor:
Jim Hu es un experto en recuperación de datos en DataNumen, Inc., que es el líder mundial en tecnologías de recuperación de datos, incluyendo Reparación de acceso y dbf reparar productos de software. Para más información visite www.datanumen.com









