Re: INSERT y Trigger INSTEAD OF

13/12/2004 - 17:45 por luis_mtz | Informe spam
Publique este mesaje y obtuve respuestas pero ya no hubo
secuencia, espero puedan comentarme sobre el caso k
planteo al final.

gracias.



Saludos

Tengo un dilema, tengo en un procedure el siguiente
codigo...

INSERT INTO dbo.movdet
(mdt_cla,mov_cla, art_cla)
VALUES (@lnid,@movcla, @artcla)
SELECT @lnerr = @@error IF @lnerr <> 0 BEGIN ROLLBACK
TRANSACTION RETURN END

en la Tabla movdet tengo un TRIGGER INSTEAD OF INSERT con
el siguiente codigo..

INSERT INTO movdet (mov_cla,art_cla)
SELECT i.mov_cla,i.art_cla
FROM inserted i INNER JOIN movimiento a ON
i.mov_cla=a.mov_cla

(Para fin de simplificar no puse el resto de los campos


en

la consulta, pero si es necesario el INNER JOIN, y
basicamente el INSERT es lo unico del trigger)

En el procedure reviso @@error si es que existe algun
error, en el TRIGGER no lo reviso. pregunta.. Es
suficiente con la revision que hago en el procedure, o es
necesario tambien hacer en el trigger, notar que en
procedure en caso de error hago un rollback.

Saludos.

luis_mtz
.



.
//////////////////////////////////////////////////////

hazlo en los dos sitios..

Saludos
Miguel Egea

*************************************************

Hola, con que lo hagas en el SP esta bien, de todas formas
podrias hacerlo
todo en el trigger y nada en el SP ;)


Salu2
Maxi


**************************************************

me surge una nueva duda, en el procedure verifico si
ocurre error despues del INSERT, notar que lo guardo en
@lnerr quien es una variable OUTPUT en el procedure. No me
queda claro que valor tomara @lnerr si el error ocurre en
el INSERT que esta ubicado en el TRIGGER INSTEAD. La idea
de plantear mi codigo TSQL es que cuando llame al
procedure pueda revisar si el parametro @lnerr trae error,
mi idea es que si me devolveria el @@error aun cuando este
ocurra en el TRIGGER INSTEAD. Por el contrario como podria
tomar el valor de @@error en el TRIGGER INSTEAD, para
pasarlo al PROCEDURE, y este pueda regresar el valor en el
parametro @lnerr.

Adicional Miguel Egea plantea ponerlo en ambos lados, en
este caso 2 es mejor que uno, pero me gustaria saber las
razones tecnicas.

Gracias.
luis_mtz
 

Leer las respuestas

#1 Maxi
13/12/2004 - 18:24 | Informe spam
Hola, los TR no admiten param de salida. Ahora si ocurre un error en el
insert (sea por insert o trigger) lo vas a poder capturar porque el @@error
<> 0.

Hacerlo en los 2 lugares asegura mas la cosa, son solo formas, seria lo
ideal pero tambien recorda el mantenimiento que esto te puede causar a
futuro


Salu2
Maxi


"luis_mtz" escribió en el mensaje
news:178801c4e133$2b55c700$

Publique este mesaje y obtuve respuestas pero ya no hubo
secuencia, espero puedan comentarme sobre el caso k
planteo al final.

gracias.


Saludos

Tengo un dilema, tengo en un procedure el siguiente
codigo...

INSERT INTO dbo.movdet
(mdt_cla,mov_cla, art_cla)
VALUES (@lnid,@movcla, @artcla)
SELECT @lnerr = @@error IF @lnerr <> 0 BEGIN ROLLBACK
TRANSACTION RETURN END

en la Tabla movdet tengo un TRIGGER INSTEAD OF INSERT con
el siguiente codigo..

INSERT INTO movdet (mov_cla,art_cla)
SELECT i.mov_cla,i.art_cla
FROM inserted i INNER JOIN movimiento a ON
i.mov_cla=a.mov_cla

(Para fin de simplificar no puse el resto de los campos


en
la consulta, pero si es necesario el INNER JOIN, y
basicamente el INSERT es lo unico del trigger)

En el procedure reviso @@error si es que existe algun
error, en el TRIGGER no lo reviso. pregunta.. Es
suficiente con la revision que hago en el procedure, o es
necesario tambien hacer en el trigger, notar que en
procedure en caso de error hago un rollback.

Saludos.

luis_mtz
.



.
//////////////////////////////////////////////////////

hazlo en los dos sitios..

Saludos
Miguel Egea

*************************************************

Hola, con que lo hagas en el SP esta bien, de todas formas
podrias hacerlo
todo en el trigger y nada en el SP ;)


Salu2
Maxi


**************************************************

me surge una nueva duda, en el procedure verifico si
ocurre error despues del INSERT, notar que lo guardo en
@lnerr quien es una variable OUTPUT en el procedure. No me
queda claro que valor tomara @lnerr si el error ocurre en
el INSERT que esta ubicado en el TRIGGER INSTEAD. La idea
de plantear mi codigo TSQL es que cuando llame al
procedure pueda revisar si el parametro @lnerr trae error,
mi idea es que si me devolveria el @@error aun cuando este
ocurra en el TRIGGER INSTEAD. Por el contrario como podria
tomar el valor de @@error en el TRIGGER INSTEAD, para
pasarlo al PROCEDURE, y este pueda regresar el valor en el
parametro @lnerr.

Adicional Miguel Egea plantea ponerlo en ambos lados, en
este caso 2 es mejor que uno, pero me gustaria saber las
razones tecnicas.

Gracias.
luis_mtz

Preguntas similares