Contro de Error en DELETE

17/02/2005 - 15:42 por Pamela | Informe spam
Hola, estoy ejecutando una instruccion DELETE para una
tabla "A" con clave "Y"la cual es llave foranea de la
tabla "B".
Al ejecutar la instruccion el mensaje de error por
pantalla es el siguiente:

Server: Msg 547, Level 16, State 1, Procedure PADELCAMPO,
Line 15
Instrucción DELETE en conflicto con la restricción COLUMN
REFERENCE 'FK_KTUSUUSUARIO_KTGENEPAIS'. El conflicto ha
aparecido en la base de datos 'rmmp_v2',
tabla 'KTUSUUSUARIO', column 'IdPais'.
Se terminó la instrucción.

Existe alguna manera de poder controlar este error,
impidiendo que aparezca por pantalla.

Ya se ha intentado con @@ERROR, pero de todos modos
aparece el mensaje antes descrito.
 

Leer las respuestas

#1 Alejandro Mesa
17/02/2005 - 16:01 | Informe spam
Pamela,

Puedes chequear que no estes borrando padres con hijos asociados (preferible
si usas un procedimiento almacenado, desde el cual pudieras enviar un error
amigable a la aplicacion que trata de borrar) o puedes usar la clausula ON
DELETE CASCADE en la definicion de la clave foranea.

Ejemplo:

use northwind
go

create table t1(colA int primary key)
go

create table t2(
colA int,
constraint fk_t2_t1_colA foreign key (colA) references t1(colA) on delete
cascade)
go

insert into t1 values(1)
insert into t1 values(2)

insert into t2 values(1)
insert into t2 values(1)
insert into t2 values(1)
insert into t2 values(2)
go

select * from t1
select * from t2
go

delete from t1 where colA = 1
go

select * from t1
select * from t2
go

alter table t2 drop constraint fk_t2_t1_colA
go

alter table t2 add constraint fk_t2_t1_colA foreign key (colA) references
t1(colA)
go

create procedure proc1
@par1 int
as
set nocount on

if exists(select * from t2 where colA = @par1)
begin
raiserror('No se puede borrar en tabla t1 porque existen filas asociadas en
tabla t2 para la clave [%d].', 16, 1, @par1)
return 0
end

delete t1 where colA = @par1

return @@error
go

execute proc1 @par1 = 2
go

drop procedure proc1
go

drop table t2, t1
go


AMB


"Pamela" wrote:

Hola, estoy ejecutando una instruccion DELETE para una
tabla "A" con clave "Y"la cual es llave foranea de la
tabla "B".
Al ejecutar la instruccion el mensaje de error por
pantalla es el siguiente:

Server: Msg 547, Level 16, State 1, Procedure PADELCAMPO,
Line 15
Instrucción DELETE en conflicto con la restricción COLUMN
REFERENCE 'FK_KTUSUUSUARIO_KTGENEPAIS'. El conflicto ha
aparecido en la base de datos 'rmmp_v2',
tabla 'KTUSUUSUARIO', column 'IdPais'.
Se terminó la instrucción.

Existe alguna manera de poder controlar este error,
impidiendo que aparezca por pantalla.

Ya se ha intentado con @@ERROR, pero de todos modos
aparece el mensaje antes descrito.

Preguntas similares