Error al eliminar en cascada

Que tal yo de nuevo por aquí preguntando
Bueno le planteo mi problema haber si me puede ayudar...
Tengo las siguientes tablas con sus respectivos campos
create table CONTACTOS (
   CVE_CONTACTO         int                  not null,
   CVE_EMPRESA          int                  null,
   NOMBRE varchar(50) null,
   APELLIDO_PAT varchar(50) null,
   APELLIDO_MAT varchar(50) null,
   FECHA_NACIMIENTO     datetime             null,
   AREA                 varchar(80)          null
)
Go
Alter table CONTACTOS
   Add constraint PK_CONTACTOS primary key (CVE_CONTACTO)
go
-------------------------------------
create table CORREOS_CONTACTOS (
   CVE_CORREO           int                  not null,
   CVE_CONTACTO         int                  not null,
   CONSECUTIVO_CORREO   int                  null,
   CORREO               varchar(80)          null
)
go
alter table CORREOS_CONTACTOS
   add constraint PK_CORREOS_CONTACTOS primary key (CVE_CONTACTO, CVE_CORREO)
go
-----------------------------
create table DOMICILIOS_CONTACTO (
   CONSECUTIVO_DOMICILIO int                  not null,
   CVE_CONTACTO         int                  not null,
   CVE_ESTADO           int                  null,
   CVE_CIUDAD           int                  null,
   CALLE varchar(150) not null,
   NUMERO_EXTERIOR varchar(10) null,
   NUMERO_INTERIOR varchar(10) null,
   NUMERO_DEPTO varchar(10) null,
   COMENTARIO varchar(100) null,
   CONSECUTIVO          int                  null
)
Go
-----------------------------
create table TELEFONOS_CONTACTOS (
   CVE_TELEFONO         int                  not null,
   CVE_CONTACTO         int                  not null,
   TELEFONO             varchar(10)          null,
   EXTENSION            varchar(10)          null,
   TIPO_TELEFONO        tinyint              null
)
go
alter table TELEFONOS_CONTACTOS
   add constraint PK_TELEFONOS_CONTACTOS primary key nonclustered (CVE_TELEFONO, CVE_CONTACTO)
go
Bueno pues al eliminar el contacto también se tiene que eliminar todos los registros que tengan que ver con el (su email, su dirección, su teléfono) para esto implemento este trigger:
create trigger tr_eliminarContacto
on contactos
instead of delete
as
delete from correos_contactos where correos_contactos.cve_contacto= (select  cve_contacto from Deleted) 
delete from domicilios_contacto where domicilios_contacto.cve_contacto= (select  cve_contacto from Deleted) 
delete from telefonos_contacto where telefonos_contacto.cve_contacto= (select  cve_contacto from Deleted) 
delete from contactos where contactos.cve_contacto= (select  cve_contacto from Deleted)
go
bueno todo sale bien, el problema es que cuando el contacto tiene por ejemplo mas un domicilio registrado me marca este error:
La subconsulta ha devuelto más de un valor, lo que no es correcto cuando va a continuación de =, !=, <, <=, >, >= o cuando se utiliza como expresión.
Se terminó la instrucción.
Bueno espero que me pueda ayudar de antemano gracias y saludos

1 respuesta

Respuesta
1
Reemplaza
delete from correos_contactos where correos_contactos.cve_contacto= (select  cve_contacto from Deleted) 
delete from domicilios_contacto where domicilios_contacto.cve_contacto= (select  cve_contacto from Deleted) 
delete from telefonos_contacto where telefonos_contacto.cve_contacto= (select  cve_contacto from Deleted) 
delete from contactos where contactos.cve_contacto= (select  cve_contacto from Deleted)
y en vez de poner tabla.cve_contacto= (select lo que sea) x
tabla.cve_contacto in (select cve_contacto  from deleted) en la sentencia que te crea problemas, con eso se resolveria el problema.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas