Ayuda con el RAISERROR

18/09/2007 - 16:36 por Víctor | Informe spam
Hola, estuve leyendo la ayuda del SQL Server 7 y tengo una duda, en el
momento de crear las relaciones entre las tablas, los desencadenadores de
crean de manera automática?, y como utilizo la sentencia raiserror si se
infringe la integridad referencial al tratar de eliminar un registro que
esta siendo utilizado en otra tabla?, muchas gracias a los que puedan
aclararme el panorama.

Víctor
 

Leer las respuestas

#1 Alejandro Mesa
18/09/2007 - 17:46 | Informe spam
Hola Victor,

No recuerdo mucho de la version 7, pero te dire que los desencadenadores no
tienen relacion directa con la declaracion de integridad referencial. Si usas
DRI con la opcion de actualizacion o borrado en cascada, eso es llevado a
cabo internamente por el motor. Es mas, las restricciones de integridad
tienen preferencia ante los desencadenadores, por lo que cuando existe un
error de integridad referencial, si existe algun desencadenador, este no se
disparara.

Ejemplo:

Estoy usando SS 2005 DE, pero creo es el mismo principio para 7.0

use tempdb
go

create table dbo.t1(
c1 int not null primary key
)
go

create table dbo.t2(
c1 int not null primary key,
c2 int not null,
constraint fk_t2_t1 foreign key (c2) references dbo.t1(c1)
)
go

create trigger tr_t1_del on dbo.t1
for delete
as
raiserror('pase por aqui!', 16, 1)
go

insert into dbo.t1 values(1)
insert into dbo.t2 values(1, 1)
go

delete dbo.t1
where c1 = 1
go

drop table dbo.t2, dbo.t1
go

Resultado:

Msg 547, Level 16, State 0, Line 7
The DELETE statement conflicted with the REFERENCE constraint "fk_t2_t1".
The conflict occurred in database "tempdb", table "dbo.t2", column 'c2'.
The statement has been terminated.

Como vez, el desencadenador nunca se disparo.


AMB


"Víctor" wrote:

Hola, estuve leyendo la ayuda del SQL Server 7 y tengo una duda, en el
momento de crear las relaciones entre las tablas, los desencadenadores de
crean de manera automática?, y como utilizo la sentencia raiserror si se
infringe la integridad referencial al tratar de eliminar un registro que
esta siendo utilizado en otra tabla?, muchas gracias a los que puedan
aclararme el panorama.

Víctor



Preguntas similares