/ / BORRADO usando la unión interna - sql-server, sql-delete

ELIMINANDO con Inner join - sql-server, sql-delete

Seguí cómo ejecutar eliminar desde: ¿Cómo eliminar usando INNER JOIN con SQL Server?

Los datos que quiero borrar:

  select * from com.Address a
inner join com.Contact as c on c.AddressId = a.AddressId
inner join cqt.CQMTrainer as t on t.ContactId = c.ContactId


select from com.Contact c
inner join cqt.CQMTrainer as t on t.ContactId = c.ContactId

Aquí está la eliminación que estoy tratando de ejecutar:

  delete a from com.Address a
inner join com.Contact as c on c.AddressId = a.AddressId
inner join cqt.CQMTrainer as t on t.ContactId = c.ContactId

delete c from com.Contact c
inner join cqt.CQMTrainer as t on t.ContactId = c.ContactId

Sin embargo, una vez que los ejecuto me sale un error de clave externa:

La instrucción DELETE entró en conflicto con la restricción REFERENCE "FK_com.Contact_com.Address_AddressId". El conflicto se produjo en base de datos "", tabla "com.Contact", columna "AddressId".

¿Qué estoy siguiendo incorrectamente? Incluso traté de añadir begin transaction y commit transaction.

Respuestas

0 para la respuesta № 1

¿Qué pasa si lo haces de la otra manera?

delete c from com.Contact c
inner join cqt.CQMTrainer as t on t.ContactId = c.ContactId

delete a from com.Address a
inner join com.Contact as c on c.AddressId = a.AddressId
inner join cqt.CQMTrainer as t on t.ContactId = c.ContactId
  • Primero vas a eliminar la información en la tabla de contactos como el error
    dice que tiene una referencia en el contacto para la identificación de la dirección por lo que no puede eliminar primero la tabla de direcciones

0 para la respuesta № 2

Mirando tu consulta tus relaciones han sidoconfigurado para lanzar una excepción cuando intenta eliminar un registro al que hace referencia el otro. Si desea evitarlo, debe elegir cómo debe manejar este caso el servidor de la base de datos. Esto se está configurando en las propiedades de referencia. Si está utilizando SQL Server Management Studio, entonces:

  1. haga clic en la tabla con el botón derecho del ratón seleccione "Diseño"
  2. entonces la columna en la que tiene relación definida (lo hará mostrarlo como filas)
  3. luego haga clic con el botón derecho del ratón en la columna usted está interesado en, seleccione "Relaciones"
  4. luego en el panel izquierdo encuentre su relación por nombre, haga clic en ella
  5. luego, en el panel derecho, aparecerá "INSERTAR y ACTUALIZAR Especificación "grupo, desplegarlo
  6. luego encontrará dos reglas, una para actualizar, otra para eliminar, puede seleccionar:

    • Ninguna acción - lanza excepción como en tu caso
    • Cascada - borra las filas de referencia
    • Establecer nulo: pondrá nulo en las filas que hacen referencia a esta fila por valores FK
    • Establecer predeterminado: establecerá el valor predeterminado para dicha columna.

Si no está utilizando dicho editor, puede configurar lo mismo colocando después de

REFERENCES TableName ColumnName

valores como:

ON DELETE  { NO ACTION | CASCADE | SET NULL | SET DEFAULT }