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
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 de brownsea
1