Saltar al contenido

Error de SQL en la actualización: la instrucción UPDATE entró en conflicto con la restricción FOREIGN KEY

Solución:

Este error se encuentra cuando se actualiza la clave principal de una tabla, pero una clave externa de otra tabla hace referencia a ella y la actualización específica se establece en Sin acción. La acción No es la opción predeterminada.

Si este es su caso y no se establece ninguna acción en la operación de actualización, puede cambiar la definición de clave externa a Cascade.

Haga clic derecho en su clave externa y seleccione Modificar. En el cuadro de diálogo Relaciones de clave externa en las especificaciones INSERTAR y ACTUALIZAR, configure la regla ACTUALIZAR en Cascade:

ingrese la descripción de la imagen aquí

También puede establecer la regla usando T-SQL:

ALTER TABLE YourTable
DROP Constraint Your_FK
GO

ALTER TABLE YourTable
ADD CONSTRAINT [New_FK_Constraint]
FOREIGN KEY (YourColumn) REFERENCES ReferencedTable(YourColumn)
ON DELETE CASCADE ON UPDATE CASCADE
GO 

Espero que esto ayude

Si no desea cambiar la estructura de su tabla, puede ejecutar la siguiente consulta:

ALTER TABLE [UserStore] 
NOCHECK CONSTRAINT FK_UserStore_User_UserId

ALTER TABLE [UserIdentity]
NOCHECK CONSTRAINT  FK_UserIdentity_User_UserId

BEGIN TRAN

UPDATE  [user] 
SET Id = 10
WHERE Id = 9

UPDATE  [dbo].[UserStore]
SET UserId = 10
WHERE UserId = 9

UPDATE  [dbo].UserIdentity
SET UserId = 10
WHERE UserId = 9

COMMIT TRAN

ALTER TABLE [UserStore] 
CHECK CONSTRAINT FK_UserStore_User_UserId

ALTER TABLE UserIdentity 
CHECK CONSTRAINT FK_UserIdentity_User_UserId

Si columna dbo.patient_address.id_no permite NULLs entonces podrías usar esta solución:

SET XACT_ABORT ON;
BEGIN TRANSACTION;

-- I assmume that [id] is the primary key of patient_address table (single column key)
-- replace the name of [id] column with the name of PK column from patient_address table
-- replace INT data type with the proper type
DECLARE @RowsForUpdate TABLE([id] INT PRIMARY KEY); 
UPDATE patient_address 
SET id_no = NULL
OUTPUT deleted.[id] INTO @RowsForUpdate ([id])
WHERE id_no='8008255601088'

UPDATE patient 
SET id_no='7008255601088' 
WHERE id_no='8008255601088'

UPDATE patient_address 
SET id_no='7008255601088' 
WHERE [id] IN (SELECT u.[id] FROM @RowsForUpdate u)

COMMIT;
¡Haz clic para puntuar esta entrada!
(Votos: 2 Promedio: 3)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *