Trigger en cascada

16/11/2008 - 19:07 por Gilbert | Informe spam
Tengo un trigger after update que por su naturaleza se dispara a si mismo en
cascada pero yo quiero que se pare cuando no modifique ningun registro.

La unica forma es contando los registros en la tabla inserted ?

otra:
En este update:

Update Tabla1 set columna1='3' where 0=1

Si tengo un trigger after update, si no se modifica nada, por qué se dispara
el trigger de todas maneras ?
asi es que funcionan ?

Preguntas similare

Leer las respuestas

#1 Gilbert
16/11/2008 - 19:12 | Informe spam
La unica forma es contando los registros en la tabla inserted ?




bueno, contando o preguntando if (exists(select * from inserted)).
Lo que pregunto es si en la definicion del trigger se puede indicar que no
se active cuando no se ha modificado nada.

gracias
Respuesta Responder a este mensaje
#2 Alejandro Mesa
16/11/2008 - 19:22 | Informe spam
Gilbert,

El trigger se dispara aunque la operacion no haya afectado ninguna fila.
Puedes usar @@ROWCOUNT para indagar si alguna fila fue afectada.

use tempdb
go

create table dbo.t1 (
c1 int
)
go

create trigger tr_t1_upd on dbo.t1
for update
as
if @@rowcount = 0 return

print 'blah blah ...'
go

insert into dbo.t1 default values
go

update dbo.t1
set c1 = 1
where c1 = 10
go

update dbo.t1
set c1 = 6
where c1 is null
go

drop table dbo.t1
go

Ten cuidado con los triggers recursivos, recuerda que el nivel mayor de
anidamiento es 32.


AMB


"Gilbert" wrote:

Tengo un trigger after update que por su naturaleza se dispara a si mismo en
cascada pero yo quiero que se pare cuando no modifique ningun registro.

La unica forma es contando los registros en la tabla inserted ?

otra:
En este update:

Update Tabla1 set columna1='3' where 0=1

Si tengo un trigger after update, si no se modifica nada, por qué se dispara
el trigger de todas maneras ?
asi es que funcionan ?





Respuesta Responder a este mensaje
#3 Gilbert
16/11/2008 - 19:38 | Informe spam
Gracias!


"Alejandro Mesa" escribió en el
mensaje news:
Gilbert,

El trigger se dispara aunque la operacion no haya afectado ninguna fila.
Puedes usar @@ROWCOUNT para indagar si alguna fila fue afectada.

use tempdb
go

create table dbo.t1 (
c1 int
)
go

create trigger tr_t1_upd on dbo.t1
for update
as
if @@rowcount = 0 return

print 'blah blah ...'
go

insert into dbo.t1 default values
go

update dbo.t1
set c1 = 1
where c1 = 10
go

update dbo.t1
set c1 = 6
where c1 is null
go

drop table dbo.t1
go

Ten cuidado con los triggers recursivos, recuerda que el nivel mayor de
anidamiento es 32.


AMB


"Gilbert" wrote:

Tengo un trigger after update que por su naturaleza se dispara a si mismo
en
cascada pero yo quiero que se pare cuando no modifique ningun registro.

La unica forma es contando los registros en la tabla inserted ?

otra:
En este update:

Update Tabla1 set columna1='3' where 0=1

Si tengo un trigger after update, si no se modifica nada, por qué se
dispara
el trigger de todas maneras ?
asi es que funcionan ?





email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida