Problemas con un trigger

26/12/2003 - 18:28 por josu | Informe spam
Hola, estoy empeando a hacer algunas cosillas (muy basicas) con sql
server y tengo un problema con un trigger (disparador). No se pq no se
ejecuta. La BD es mu sencilla, sobre peliculas y ahi el problema no
está seguro. Pongo aqui el trigger, a ver si me podeis echar una mano:

en
uno el campo numeroPeliculas de la tabla DIRECTOR

create trigger IncrementaPeliculas
on DIRECTOR
after insert
as
declare @idDirector int
begin
select @idDirector = idDirector from INSERTED
if @idDirector is not null
begin
begin tran
update DIRECTOR
set DIRECTOR.numeroPeliculas = DIRECTOR.numeroPeliculas +
1
from DIRECTOR
where DIRECTOR.idDirector = @idDirector
commit tran
end
else
raiserror ('Director Desconocido', 16, 1)
end
go


Muchas gracias, un saludo y felices fiestas a todos y todas,
J & JJ

Preguntas similare

Leer las respuestas

#1 Maximiliano Damian Accotto
26/12/2003 - 18:41 | Informe spam
hola,

a ver si te entendi,

vos aca solo tenes una sola tabla DIRECTOR, la cual se almacenan peliculas,
por lo que veo en esta tabla podes poner mas de una vez la misma pelicula
no?

Veo que haces un Update pero como vas a hacer un update si no hay registros
aun?

Si queres hacer algo asi debes usar Triggers Instead of Insert por ej, te
aconsejo que leas bien el manual.

Ahora si me decis bien que es lo que necesitas hacer quizas te pueda ayudar
mas facil.

Un saludo

Maximiliano Damian Accotto
"J&JJ" escribió en el mensaje
news:
Hola, estoy empeando a hacer algunas cosillas (muy basicas) con sql
server y tengo un problema con un trigger (disparador). No se pq no se
ejecuta. La BD es mu sencilla, sobre peliculas y ahi el problema no
está seguro. Pongo aqui el trigger, a ver si me podeis echar una mano:

en
uno el campo numeroPeliculas de la tabla DIRECTOR

create trigger IncrementaPeliculas
on DIRECTOR
after insert
as
declare @idDirector int
begin
select @idDirector = idDirector from INSERTED
if @idDirector is not null
begin
begin tran
update DIRECTOR
set DIRECTOR.numeroPeliculas = DIRECTOR.numeroPeliculas +
1
from DIRECTOR
where DIRECTOR.idDirector = @idDirector
commit tran
end
else
raiserror ('Director Desconocido', 16, 1)
end
go


Muchas gracias, un saludo y felices fiestas a todos y todas,
J & JJ
Respuesta Responder a este mensaje
#2 Sérgio Monteiro
27/12/2003 - 04:31 | Informe spam
Que tal si se usa un campo calculado acá? Puede ser que te sea mejor. fijate
en BOL la utilizacion de campos calculados.

Sérgio Monteiro - Brasil
www.sqlpass.org
"J&JJ" escreveu na mensagem
news:
Hola, estoy empeando a hacer algunas cosillas (muy basicas) con sql
server y tengo un problema con un trigger (disparador). No se pq no se
ejecuta. La BD es mu sencilla, sobre peliculas y ahi el problema no
está seguro. Pongo aqui el trigger, a ver si me podeis echar una mano:

en
uno el campo numeroPeliculas de la tabla DIRECTOR

create trigger IncrementaPeliculas
on DIRECTOR
after insert
as
declare @idDirector int
begin
select @idDirector = idDirector from INSERTED
if @idDirector is not null
begin
begin tran
update DIRECTOR
set DIRECTOR.numeroPeliculas = DIRECTOR.numeroPeliculas +
1
from DIRECTOR
where DIRECTOR.idDirector = @idDirector
commit tran
end
else
raiserror ('Director Desconocido', 16, 1)
end
go


Muchas gracias, un saludo y felices fiestas a todos y todas,
J & JJ
Respuesta Responder a este mensaje
#3 josu
28/12/2003 - 18:48 | Informe spam
Hola!!
Efectivamente solo mandé la tabla director por no poner el resto de
tablas, pero cuento con una tabla peliculas en las q se guarda el
titulo de la pelicula. Personalmente no creo q se pueda poner mas de
una vez la misma pelicula ya que me ocupe de que el campo nombre
pelicula fuese UNIQUE.

Por otro el hacer upadate si q tiene sentido ya q cuento con unos
pocos registros insertados para realizar pruebas.

Por otro lado, lo que pretendo es realizar un trigger after, ya que
asi me lo requiere el trabajo para aprobar la asignatura.

El problema en cuestion es que tras realizar una insert, deberia
ejecutarse el trigger, no? pues el caso es q no lo hace. La cuestion
es q debo aprender a utilizar triggers after por ello no utilizo
campos calculados ni nada del estilo. Basicamente lo q este trigger
pretende hacer es que cada vez que inserto una nueva pelicula con un
codigo director, el campo de numero de peliculas se incremente en uno.
Tras lo cual acabo de percatarme de mi error Ya se sabe, te pasas
horas trabajando en algo y te quedas ciego hasta q lo vuelves a ojear.

Gracias.

"Maximiliano Damian Accotto" <maxi_accotto[arroba]speedy.com.ar.SACAME> wrote in message news:...
hola,

a ver si te entendi,

vos aca solo tenes una sola tabla DIRECTOR, la cual se almacenan peliculas,
por lo que veo en esta tabla podes poner mas de una vez la misma pelicula
no?

Veo que haces un Update pero como vas a hacer un update si no hay registros
aun?

Si queres hacer algo asi debes usar Triggers Instead of Insert por ej, te
aconsejo que leas bien el manual.

Ahora si me decis bien que es lo que necesitas hacer quizas te pueda ayudar
mas facil.

Un saludo

Maximiliano Damian Accotto
"J&JJ" escribió en el mensaje
news:
> Hola, estoy empeando a hacer algunas cosillas (muy basicas) con sql
> server y tengo un problema con un trigger (disparador). No se pq no se
> ejecuta. La BD es mu sencilla, sobre peliculas y ahi el problema no
> está seguro. Pongo aqui el trigger, a ver si me podeis echar una mano:
>
> en
> uno el campo numeroPeliculas de la tabla DIRECTOR
>
> create trigger IncrementaPeliculas
> on DIRECTOR
> after insert
> as
> declare @idDirector int
> begin
> select @idDirector = idDirector from INSERTED
> if @idDirector is not null
> begin
> begin tran
> update DIRECTOR
> set DIRECTOR.numeroPeliculas = DIRECTOR.numeroPeliculas +
> 1
> from DIRECTOR
> where DIRECTOR.idDirector = @idDirector
> commit tran
> end
> else
> raiserror ('Director Desconocido', 16, 1)
> end
> go
>
>
> Muchas gracias, un saludo y felices fiestas a todos y todas,
> J & JJ
Respuesta Responder a este mensaje
#4 Maximiliano d. Accotto
28/12/2003 - 23:10 | Informe spam
Hola, bueno ahora que explicaste mejor el problema es mas facil ayudarte

a ver si estamos bien y es asi:

Vos tenes 2 tablas

a)director
b) Peliculas

y por lo que entendi vos queres que cada vez que se inserte una pelicula
para un director a este director le sume uno en un campo cantidad y si
borras una peli lo reste, por lo que te quedaria algo asi como:

Director Num_peliculas
abc 7

claro tenes otra tabla de peliculas que debes indicarle el director no?

Bien de ser asi lo podes resolver con un trigger asi como vos estas diciendo
sin ningun problema (es mas es lo recomendado)


Es esto lo que necesitas?

a ver con esto como te va (no lo probe porque no tengo sql)

Create trigger tr_peliculas on peliculas
insert,update

update director set num_pelis = num_pelis + (select count(*) from inserted
where inserted.director_id = director.id
group by inserted.director_id)
from director

Proba con esto, para decrementar deberias usar algo asi

update director set num_pelis = num_pelis - (select count(*) from deleted
where deleted.director_id = director.id
group by deleted.director_id)
from director

Salu2

"J&JJ" escribió en el mensaje
news:
Hola!!
Efectivamente solo mandé la tabla director por no poner el resto de
tablas, pero cuento con una tabla peliculas en las q se guarda el
titulo de la pelicula. Personalmente no creo q se pueda poner mas de
una vez la misma pelicula ya que me ocupe de que el campo nombre
pelicula fuese UNIQUE.

Por otro el hacer upadate si q tiene sentido ya q cuento con unos
pocos registros insertados para realizar pruebas.

Por otro lado, lo que pretendo es realizar un trigger after, ya que
asi me lo requiere el trabajo para aprobar la asignatura.

El problema en cuestion es que tras realizar una insert, deberia
ejecutarse el trigger, no? pues el caso es q no lo hace. La cuestion
es q debo aprender a utilizar triggers after por ello no utilizo
campos calculados ni nada del estilo. Basicamente lo q este trigger
pretende hacer es que cada vez que inserto una nueva pelicula con un
codigo director, el campo de numero de peliculas se incremente en uno.
Tras lo cual acabo de percatarme de mi error Ya se sabe, te pasas
horas trabajando en algo y te quedas ciego hasta q lo vuelves a ojear.

Gracias.

"Maximiliano Damian Accotto" <maxi_accotto[arroba]speedy.com.ar.SACAME>


wrote in message news:...
> hola,
>
> a ver si te entendi,
>
> vos aca solo tenes una sola tabla DIRECTOR, la cual se almacenan


peliculas,
> por lo que veo en esta tabla podes poner mas de una vez la misma


pelicula
> no?
>
> Veo que haces un Update pero como vas a hacer un update si no hay


registros
> aun?
>
> Si queres hacer algo asi debes usar Triggers Instead of Insert por ej,


te
> aconsejo que leas bien el manual.
>
> Ahora si me decis bien que es lo que necesitas hacer quizas te pueda


ayudar
> mas facil.
>
> Un saludo
>
> Maximiliano Damian Accotto
> "J&JJ" escribió en el mensaje
> news:
> > Hola, estoy empeando a hacer algunas cosillas (muy basicas) con sql
> > server y tengo un problema con un trigger (disparador). No se pq no se
> > ejecuta. La BD es mu sencilla, sobre peliculas y ahi el problema no
> > está seguro. Pongo aqui el trigger, a ver si me podeis echar una mano:
> >
> > en
> > uno el campo numeroPeliculas de la tabla DIRECTOR
> >
> > create trigger IncrementaPeliculas
> > on DIRECTOR
> > after insert
> > as
> > declare @idDirector int
> > begin
> > select @idDirector = idDirector from INSERTED
> > if @idDirector is not null
> > begin
> > begin tran
> > update DIRECTOR
> > set DIRECTOR.numeroPeliculas = DIRECTOR.numeroPeliculas +
> > 1
> > from DIRECTOR
> > where DIRECTOR.idDirector = @idDirector
> > commit tran
> > end
> > else
> > raiserror ('Director Desconocido', 16, 1)
> > end
> > go
> >
> >
> > Muchas gracias, un saludo y felices fiestas a todos y todas,
> > J & JJ
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida