Trigger

05/08/2004 - 18:27 por Omar Flores | Informe spam
Que tal, necesito ayuda para crear un trigger que haga lo siguiente.

Tengo estas 2 tablas Inventario y Entradas, en la tabla de Inventario
tengo un campo llamando Exsitencia y enla Tabla Entradas un campo
llamado Cantidad entonces quiero que cuando ponga x número en el campo
de cantidad de la Tabla Entradas lo sume a el campo Exsitencia de la
Tabla Inventario.

Espero y me puedan ayudar. Muchas Gracias.

Preguntas similare

Leer las respuestas

#1 Javier Loria
05/08/2004 - 18:40 | Informe spam
Hola Omar:
Hay 2 alternativas dependiendo del esquema de las tablas:
Caso 1
UPDATE Inventario
SET Existencia=Existencia+Cantidad
FROM Inventario JOIN Inserted
ON Inventario.PK=Inserted.PK
Caso 2
UPDATE Inventario
SET Existencia=Existencia+InsAgrupado.Cantidad
FROM Inventario JOIN
(SELECT Inserted.PK
, SUM(Cantidad) AS Cantidad
FROM Inserted
GROUP BY Inserted.PK
) AS InsAgrupado
ON Inventario.PK=InsAgrupado.PK
El primero es mas sencillo pero produce problemas si hacen un Insert que
incluya varias veces el mismo producto, el segundo es mas complejo pero no
padece del mismo problema.
PK la llave primaria de la Tabla de Inventario, no de compras. O sea
ProductID, CodigoProducto o cualquiera similar.
Espero te sirva,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.

Omar Flores escribio:
Que tal, necesito ayuda para crear un trigger que haga lo siguiente.

Tengo estas 2 tablas Inventario y Entradas, en la tabla de Inventario
tengo un campo llamando Exsitencia y enla Tabla Entradas un campo
llamado Cantidad entonces quiero que cuando ponga x número en el campo
de cantidad de la Tabla Entradas lo sume a el campo Exsitencia de la
Tabla Inventario.

Espero y me puedan ayudar. Muchas Gracias.
Respuesta Responder a este mensaje
#2 Javier Loria
05/08/2004 - 20:43 | Informe spam
Hola Omar:
Sip, disculpa el trigger que te envie solo sirve para INSERT si lo
quieres para UPDATE es igual, pero adicionalmente debes restar las cantidad
DELETED
O sea la sentencia exactamente igual a la que envie, sustituyendo
Inserted por Deleted y cambiando la suma de la cantidad por una resta. Esta
sentencia y la anterior las pones en el Trigger de Update.
Si tuvieras certeza que no te cambian la llave primaria podrias hacer un
join con la diferencia y hacerlo de un golpe, pero como no conozco el
esquema es mas seguro dejarlo abierto aunque sea un poco mas lento.
El deleted solo requiere el Deleted y no el Inserted.
Saludos,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.


Omar Flores escribio:
Que tal, si me sirvio el caso2, pero tengo aun un problema, cuando
inserto un regsitro no hay ningun problema, pero cuando quiero
actualizar (mofidicar) algun registro en las Entradas es donde esta
el problema, por ejemplo la existencia se quedo en 10 y supongamos
que en la entrrda yo puse un 10 pero lo quiero cambiar por un 1 en la
existencia me aparece un 11 y no 1, ojala y me puedan decir que
modificación es necesaria para el caso del Update.

Muchas gracias.

"Javier Loria" escribió en el mensaje
news:
Hola Omar:
Hay 2 alternativas dependiendo del esquema de las tablas:
>> Caso 1
UPDATE Inventario
SET Existencia=Existencia+Cantidad
FROM Inventario JOIN Inserted
ON Inventario.PK=Inserted.PK
>> Caso 2
UPDATE Inventario
SET Existencia=Existencia+InsAgrupado.Cantidad
FROM Inventario JOIN
(SELECT Inserted.PK
, SUM(Cantidad) AS Cantidad
FROM Inserted
GROUP BY Inserted.PK
) AS InsAgrupado
ON Inventario.PK=InsAgrupado.PK
>> El primero es mas sencillo pero produce problemas si hacen un
Insert que incluya varias veces el mismo producto, el segundo es mas
complejo pero no padece del mismo problema.
PK la llave primaria de la Tabla de Inventario, no de compras. O
sea ProductID, CodigoProducto o cualquiera similar.
Espero te sirva,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.

Omar Flores escribio:
Que tal, necesito ayuda para crear un trigger que haga lo siguiente.

Tengo estas 2 tablas Inventario y Entradas, en la tabla de
Inventario tengo un campo llamando Exsitencia y enla Tabla Entradas
un campo llamado Cantidad entonces quiero que cuando ponga x número
en el campo de cantidad de la Tabla Entradas lo sume a el campo
Exsitencia de la Tabla Inventario.

Espero y me puedan ayudar. Muchas Gracias.
Respuesta Responder a este mensaje
#3 Omar Flores
05/08/2004 - 21:15 | Informe spam
Que tal, si me sirvio el caso2, pero tengo aun un problema, cuando inserto
un regsitro no hay ningun problema, pero cuando quiero actualizar
(mofidicar) algun registro en las Entradas es donde esta el problema, por
ejemplo la existencia se quedo en 10 y supongamos que en la entrrda yo puse
un 10 pero lo quiero cambiar por un 1 en la existencia me aparece un 11 y no
1, ojala y me puedan decir que modificación es necesaria para el caso del
Update.

Muchas gracias.

"Javier Loria" escribió en el mensaje
news:
Hola Omar:
Hay 2 alternativas dependiendo del esquema de las tablas:
> Caso 1
UPDATE Inventario
SET Existencia=Existencia+Cantidad
FROM Inventario JOIN Inserted
ON Inventario.PK=Inserted.PK
> Caso 2
UPDATE Inventario
SET Existencia=Existencia+InsAgrupado.Cantidad
FROM Inventario JOIN
(SELECT Inserted.PK
, SUM(Cantidad) AS Cantidad
FROM Inserted
GROUP BY Inserted.PK
) AS InsAgrupado
ON Inventario.PK=InsAgrupado.PK
> El primero es mas sencillo pero produce problemas si hacen un Insert


que
incluya varias veces el mismo producto, el segundo es mas complejo pero no
padece del mismo problema.
PK la llave primaria de la Tabla de Inventario, no de compras. O sea
ProductID, CodigoProducto o cualquiera similar.
Espero te sirva,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.

Omar Flores escribio:
> Que tal, necesito ayuda para crear un trigger que haga lo siguiente.
>
> Tengo estas 2 tablas Inventario y Entradas, en la tabla de Inventario
> tengo un campo llamando Exsitencia y enla Tabla Entradas un campo
> llamado Cantidad entonces quiero que cuando ponga x número en el campo
> de cantidad de la Tabla Entradas lo sume a el campo Exsitencia de la
> Tabla Inventario.
>
> Espero y me puedan ayudar. Muchas Gracias.


Respuesta Responder a este mensaje
#4 Javier Loria
05/08/2004 - 23:49 | Informe spam
Hola Omar:
Con gusto:
==-- Rebaja la cantidad Anterior
UPDATE Inventario
SET Existencia=Existencia-DelAgrupado.Cantidad
FROM Inventario
JOIN (SELECT Deleted.PK
, SUM(Cantidad) AS Cantidad
FROM Deleted
GROUP BY Deleted.PK) AS DelAgrupado
ON Inventario.PK=DelAgrupado.PK
UPDATE Inventario
SET Existencia=Existencia+InsAgrupado.Cantidad
FROM Inventario
JOIN (SELECT Inserted.PK
, SUM(Cantidad) AS Cantidad
FROM Inserted
GROUP BY Inserted.PK) AS InsAgrupado
ON Inventario.PK=InsAgrupado.PK
== Ese trigger deberia hacer el trabajo para INSERT, DELETE, y UPDATE. Y no
creas yo tampoco uso mucho los triggers casi todo lo pongo en
procedimientos.
Espero te sirva,

Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.
"Omar Flores" wrote in message
news:
Que tal Javier, me pudieras mandar la instrucción de como debería de


quedar
el trigger, ya que ahora solo resta el ultimo valor que tenia antes de
cambiarlo por el nuevo.

Muchus gracias por tu ayuda ya que estoy muy verde en esto de los


Triggers.



"Javier Loria" escribió en el mensaje
news:%
> Hola Omar:
> Sip, disculpa el trigger que te envie solo sirve para INSERT si lo
> quieres para UPDATE es igual, pero adicionalmente debes restar las
cantidad
> DELETED
> O sea la sentencia exactamente igual a la que envie, sustituyendo
> Inserted por Deleted y cambiando la suma de la cantidad por una resta.
Esta
> sentencia y la anterior las pones en el Trigger de Update.
> Si tuvieras certeza que no te cambian la llave primaria podrias


hacer
un
> join con la diferencia y hacerlo de un golpe, pero como no conozco el
> esquema es mas seguro dejarlo abierto aunque sea un poco mas lento.
> El deleted solo requiere el Deleted y no el Inserted.
> Saludos,
>
>
> Javier Loria
> Costa Rica
> Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
> que pueda ser copiado y pegado al Query Analizer.
> La version de SQL y Service Pack tambien ayuda.
>
>
> Omar Flores escribio:
> > Que tal, si me sirvio el caso2, pero tengo aun un problema, cuando
> > inserto un regsitro no hay ningun problema, pero cuando quiero
> > actualizar (mofidicar) algun registro en las Entradas es donde esta
> > el problema, por ejemplo la existencia se quedo en 10 y supongamos
> > que en la entrrda yo puse un 10 pero lo quiero cambiar por un 1 en la
> > existencia me aparece un 11 y no 1, ojala y me puedan decir que
> > modificación es necesaria para el caso del Update.
> >
> > Muchas gracias.
> >
> > "Javier Loria" escribió en el mensaje
> > news:
> >> Hola Omar:
> >> Hay 2 alternativas dependiendo del esquema de las tablas:
> >> > > >> Caso 1
> >> UPDATE Inventario
> >> SET Existencia=Existencia+Cantidad
> >> FROM Inventario JOIN Inserted
> >> ON Inventario.PK=Inserted.PK
> >> > > >> Caso 2
> >> UPDATE Inventario
> >> SET Existencia=Existencia+InsAgrupado.Cantidad
> >> FROM Inventario JOIN
> >> (SELECT Inserted.PK
> >> , SUM(Cantidad) AS Cantidad
> >> FROM Inserted
> >> GROUP BY Inserted.PK
> >> ) AS InsAgrupado
> >> ON Inventario.PK=InsAgrupado.PK
> >> > > >> El primero es mas sencillo pero produce problemas si hacen un
> >> Insert que incluya varias veces el mismo producto, el segundo es mas
> >> complejo pero no padece del mismo problema.
> >> PK la llave primaria de la Tabla de Inventario, no de compras. O
> >> sea ProductID, CodigoProducto o cualquiera similar.
> >> Espero te sirva,
> >>
> >>
> >> Javier Loria
> >> Costa Rica
> >> Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
> >> que pueda ser copiado y pegado al Query Analizer.
> >> La version de SQL y Service Pack tambien ayuda.
> >>
> >> Omar Flores escribio:
> >>> Que tal, necesito ayuda para crear un trigger que haga lo siguiente.
> >>>
> >>> Tengo estas 2 tablas Inventario y Entradas, en la tabla de
> >>> Inventario tengo un campo llamando Exsitencia y enla Tabla Entradas
> >>> un campo llamado Cantidad entonces quiero que cuando ponga x número
> >>> en el campo de cantidad de la Tabla Entradas lo sume a el campo
> >>> Exsitencia de la Tabla Inventario.
> >>>
> >>> Espero y me puedan ayudar. Muchas Gracias.
>
>


Respuesta Responder a este mensaje
#5 Omar Flores
06/08/2004 - 00:08 | Informe spam
Que tal Javier, me pudieras mandar la instrucción de como debería de quedar
el trigger, ya que ahora solo resta el ultimo valor que tenia antes de
cambiarlo por el nuevo.

Muchus gracias por tu ayuda ya que estoy muy verde en esto de los Triggers.



"Javier Loria" escribió en el mensaje
news:%
Hola Omar:
Sip, disculpa el trigger que te envie solo sirve para INSERT si lo
quieres para UPDATE es igual, pero adicionalmente debes restar las


cantidad
DELETED
O sea la sentencia exactamente igual a la que envie, sustituyendo
Inserted por Deleted y cambiando la suma de la cantidad por una resta.


Esta
sentencia y la anterior las pones en el Trigger de Update.
Si tuvieras certeza que no te cambian la llave primaria podrias hacer


un
join con la diferencia y hacerlo de un golpe, pero como no conozco el
esquema es mas seguro dejarlo abierto aunque sea un poco mas lento.
El deleted solo requiere el Deleted y no el Inserted.
Saludos,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.


Omar Flores escribio:
> Que tal, si me sirvio el caso2, pero tengo aun un problema, cuando
> inserto un regsitro no hay ningun problema, pero cuando quiero
> actualizar (mofidicar) algun registro en las Entradas es donde esta
> el problema, por ejemplo la existencia se quedo en 10 y supongamos
> que en la entrrda yo puse un 10 pero lo quiero cambiar por un 1 en la
> existencia me aparece un 11 y no 1, ojala y me puedan decir que
> modificación es necesaria para el caso del Update.
>
> Muchas gracias.
>
> "Javier Loria" escribió en el mensaje
> news:
>> Hola Omar:
>> Hay 2 alternativas dependiendo del esquema de las tablas:
>> > >> Caso 1
>> UPDATE Inventario
>> SET Existencia=Existencia+Cantidad
>> FROM Inventario JOIN Inserted
>> ON Inventario.PK=Inserted.PK
>> > >> Caso 2
>> UPDATE Inventario
>> SET Existencia=Existencia+InsAgrupado.Cantidad
>> FROM Inventario JOIN
>> (SELECT Inserted.PK
>> , SUM(Cantidad) AS Cantidad
>> FROM Inserted
>> GROUP BY Inserted.PK
>> ) AS InsAgrupado
>> ON Inventario.PK=InsAgrupado.PK
>> > >> El primero es mas sencillo pero produce problemas si hacen un
>> Insert que incluya varias veces el mismo producto, el segundo es mas
>> complejo pero no padece del mismo problema.
>> PK la llave primaria de la Tabla de Inventario, no de compras. O
>> sea ProductID, CodigoProducto o cualquiera similar.
>> Espero te sirva,
>>
>>
>> Javier Loria
>> Costa Rica
>> Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
>> que pueda ser copiado y pegado al Query Analizer.
>> La version de SQL y Service Pack tambien ayuda.
>>
>> Omar Flores escribio:
>>> Que tal, necesito ayuda para crear un trigger que haga lo siguiente.
>>>
>>> Tengo estas 2 tablas Inventario y Entradas, en la tabla de
>>> Inventario tengo un campo llamando Exsitencia y enla Tabla Entradas
>>> un campo llamado Cantidad entonces quiero que cuando ponga x número
>>> en el campo de cantidad de la Tabla Entradas lo sume a el campo
>>> Exsitencia de la Tabla Inventario.
>>>
>>> Espero y me puedan ayudar. Muchas Gracias.


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