Detener un trigger

16/05/2005 - 17:01 por Carlos Rodriguez | Informe spam
Si yo tengo un trigger con varias instrucciones y en una de ellas ocurre un
error. La ejecucion del resto se interrumpe ? o debo interrumpirlo
explicitamente ?

gracias

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
16/05/2005 - 17:22 | Informe spam
Carlos,

Que tipo de error?

Si es un error debido al esquema de la bd entonces el trigger hace un
rollback automatico. Si el error es un error logico o de chequeo de las
reglas del negocio, entonces debes hacer un rollback de la trasaccion
explicitamente.

Ejemplo:

use northwind
go

create table t1 (
c1 int not null identity(1, 1) primary key
)
go

create table t2 (
c1 int not null
)
go

create trigger tr_t1_ins on t1
for insert
as
insert into t2(c1)
select null from inserted
go

insert into t1 default values
go

select * from t1
go

alter trigger tr_t1_ins on t1
for insert
as
if exists(select * from inserted where c1 % 5 = 0)
begin
raiserror('no acepto enteros multiplos de 5.', 16, 1)
rollback transaction
end
go

truncate table t1
go

insert into t1 default values
insert into t1 default values
insert into t1 default values
insert into t1 default values
go

select * from t1
go

insert into t1 default values
go

select * from t1
go

drop table t1, t2
go


AMB


"Carlos Rodriguez" wrote:

Si yo tengo un trigger con varias instrucciones y en una de ellas ocurre un
error. La ejecucion del resto se interrumpe ? o debo interrumpirlo
explicitamente ?

gracias



Respuesta Responder a este mensaje
#2 Carlos Rodriguez
16/05/2005 - 17:45 | Informe spam
Si, gracias.
Pero yo me refería a si cuando tengo dos o mas instrucciones en el trigger y
digamos la primera puede producir un error, si debo de preguntar por @@ERROR
antes de ejecutar la segunda para evitar que se sigan ejecutando, o en su
defecto, sql server detecta el error y cancela la ejecucion para proceder al
rollback automaticamente ?


"Alejandro Mesa" wrote in message
news:
Carlos,

Que tipo de error?

Si es un error debido al esquema de la bd entonces el trigger hace un
rollback automatico. Si el error es un error logico o de chequeo de las
reglas del negocio, entonces debes hacer un rollback de la trasaccion
explicitamente.

Ejemplo:

use northwind
go

create table t1 (
c1 int not null identity(1, 1) primary key
)
go

create table t2 (
c1 int not null
)
go

create trigger tr_t1_ins on t1
for insert
as
insert into t2(c1)
select null from inserted
go

insert into t1 default values
go

select * from t1
go

alter trigger tr_t1_ins on t1
for insert
as
if exists(select * from inserted where c1 % 5 = 0)
begin
raiserror('no acepto enteros multiplos de 5.', 16, 1)
rollback transaction
end
go

truncate table t1
go

insert into t1 default values
insert into t1 default values
insert into t1 default values
insert into t1 default values
go

select * from t1
go

insert into t1 default values
go

select * from t1
go

drop table t1, t2
go


AMB


"Carlos Rodriguez" wrote:

> Si yo tengo un trigger con varias instrucciones y en una de ellas ocurre


un
> error. La ejecucion del resto se interrumpe ? o debo interrumpirlo
> explicitamente ?
>
> gracias
>
>
>
Respuesta Responder a este mensaje
#3 Alejandro Mesa
16/05/2005 - 18:11 | Informe spam
Usa el procedimeinto almacenado sp_sproc_columns.

Ejemplo:

use northwind
go

exec sp_sproc_columns 'Sales by Year'


AMB

"Carlos Rodriguez" wrote:

Si yo tengo un trigger con varias instrucciones y en una de ellas ocurre un
error. La ejecucion del resto se interrumpe ? o debo interrumpirlo
explicitamente ?

gracias



Respuesta Responder a este mensaje
#4 Alejandro Mesa
16/05/2005 - 18:14 | Informe spam
Carlos,

Debes ver si hubo un error y rollback la transaccion manualmente y usar
"return" para no continuar ejecutando el resto de las sentencias.

use northwind
go

create table t1 (
c1 int not null identity(1, 1) primary key
)
go

create table t2 (
c1 int not null check (c1 >= 0)
)
go

create trigger tr_t1_ins on t1
for insert
as
insert into t2(c1)
select c1 from inserted

update t2
set c1 = -1 * c1
where c1 % 3 = 0

if @@error != 0
begin
raiserror('error actualizando tabla t2.', 16, 1)
rollback transaction
return
end

print @@identity
go

insert into t1 default values
insert into t1 default values
go

insert into t1 default values
go

select * from t1
select * from t2
go

drop table t1, t2
go


AMB

"Carlos Rodriguez" wrote:

Si, gracias.
Pero yo me refería a si cuando tengo dos o mas instrucciones en el trigger y
digamos la primera puede producir un error, si debo de preguntar por @@ERROR
antes de ejecutar la segunda para evitar que se sigan ejecutando, o en su
defecto, sql server detecta el error y cancela la ejecucion para proceder al
rollback automaticamente ?


"Alejandro Mesa" wrote in message
news:
> Carlos,
>
> Que tipo de error?
>
> Si es un error debido al esquema de la bd entonces el trigger hace un
> rollback automatico. Si el error es un error logico o de chequeo de las
> reglas del negocio, entonces debes hacer un rollback de la trasaccion
> explicitamente.
>
> Ejemplo:
>
> use northwind
> go
>
> create table t1 (
> c1 int not null identity(1, 1) primary key
> )
> go
>
> create table t2 (
> c1 int not null
> )
> go
>
> create trigger tr_t1_ins on t1
> for insert
> as
> insert into t2(c1)
> select null from inserted
> go
>
> insert into t1 default values
> go
>
> select * from t1
> go
>
> alter trigger tr_t1_ins on t1
> for insert
> as
> if exists(select * from inserted where c1 % 5 = 0)
> begin
> raiserror('no acepto enteros multiplos de 5.', 16, 1)
> rollback transaction
> end
> go
>
> truncate table t1
> go
>
> insert into t1 default values
> insert into t1 default values
> insert into t1 default values
> insert into t1 default values
> go
>
> select * from t1
> go
>
> insert into t1 default values
> go
>
> select * from t1
> go
>
> drop table t1, t2
> go
>
>
> AMB
>
>
> "Carlos Rodriguez" wrote:
>
> > Si yo tengo un trigger con varias instrucciones y en una de ellas ocurre
un
> > error. La ejecucion del resto se interrumpe ? o debo interrumpirlo
> > explicitamente ?
> >
> > gracias
> >
> >
> >



Respuesta Responder a este mensaje
#5 Alejandro Mesa
16/05/2005 - 18:29 | Informe spam
Lo siento, me equivoque de hilo.


AMB

"Alejandro Mesa" wrote:

Usa el procedimeinto almacenado sp_sproc_columns.

Ejemplo:

use northwind
go

exec sp_sproc_columns 'Sales by Year'


AMB

"Carlos Rodriguez" wrote:

> Si yo tengo un trigger con varias instrucciones y en una de ellas ocurre un
> error. La ejecucion del resto se interrumpe ? o debo interrumpirlo
> explicitamente ?
>
> gracias
>
>
>
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida