hay muchas maneras de actualizar el stock del productos ,Pero hay una forma de hacerlo con triggers
para este ejemplo utilizamos trigger.
¿ Pero que es triger?
Los Triggers o Disparadores son objetos que se asocian con tablas y se almacenan en la base de datos. Su nombre se deriva por el comportamiento que presentan en su funcionamiento, ya que se ejecutan cuando sucede algún evento sobre las tablas a las que se encuentra asociado. Los eventos que hacen que se ejecute un trigger son las operaciones de inserción (INSERT), borrado (DELETE) o actualización (UPDATE), ya que modifican los datos de una tabla.
La utilidad principal de un trigger es mejorar la administración de la base de datos, ya que no requieren que un usuario los ejecute. Por lo tanto, son empleados para implementar las REGLAS DE NEGOCIO (tipo especial de integridad) de una base de datos. Una Regla de Negocio es cualquier restricción, requerimiento, necesidad o actividad especial que debe ser verificada al momento de intentar agregar, borrar o actualizar la información de una base de datos. Los triggers pueden prevenir errores en los datos, modificar valores de una vista, sincronizar tablas, entre otros.
Ejemplo de como actualizar el stock de nuestro producto utilizando trigger
Cada vez que
se efectua
una orden (orders) en el detalle de la orden (order
details) se almacenan los productos pedidos (productid) y su cantidad
(quantity), la cantidad pedida de un producto en eldetalle de la
orden (order details) debe rebajarse de las Unidades en
Inventario (UnitInStock de la tabla products) de los Productos.
La
modificación al inventario se da cada vez que se afecta la tabla detalle
de la orden(order details) porque si vendo un producto tengo que
hacer una inserción del producto que estoy vendiendo y
debe rebajar al inventario (UnitsInStock). Si borro una fila de la
tabla detalle de la orden (order details) porque el
cliente ya no quiere ese producto lo esta devolviendo por lo que debe
volver a cargarle las unidades al inventario. Y si el cliente en una orden
ya hecha ya no quiere cinco unidades de un producto si no 10 entonces
debo
regresarle al inventario las 5 unidades pedidas anteriormente y
luego restarle 10 (a si funciona con los
triggers).
Para que este
caso se pueda resolver con un trigger debemos tener en cuenta que:
1. Los triggers se ponen sobre la
tabla detalle de ordenes (order details) y son varios
triggers no solo uno, dicho sea de paso la tabla puede tener mas de un
trigger asociado
2. Cuando se inserta un dato en una
tabla en SQL Server se crea una tabla temporal con la misma estructura de
la tabla donde estoy insertando que se llama inserted esta
tabla temporal tiene el dato que se esta insertando. Igual ocurre
cuando se elimina un dato, se crea una tabla temporal que se
llama deleted que tiene la misma estructura de la tabla donde estoy
borrando y el o los datos que se están eliminando.
Y cuando ocurre un Update se crean las dos tablas con la misma estructura
de la tabla donde estoy haciendo update, Deleted e Inserted donde deleted
tiene el dato antiguo a modificar e inserted tiene el nuevo dato.
3. Cuando
se hace un nuevo pedido y se insertan a la tabla detalle de
ordenes(order details) el producto y las unidades a pedir debemos
tener en cuenta que el trigger se vale de la tabla inserted que
se crea con la misma estructura que [order details] para obtener el
producto (productid) y la cantidad (quantity) pedida que debe debitar de
unidades en estock. Y el trigger quedaria de la siguiente forma:
Create trigger Debitar_Stock
on [order details]
for Insert
as
Update P set P.UnitsInStock=P.UnitsInStock-D.Quantity
from products as P inner join
INSERTED as D on D.ProductID=P.ProductID
4. Cuando es necesario eliminar
un registro a la tabla detalle de ordenes(order details)
debemos tener en cuenta que el trigger se vale de la tabladeleted que
se crea con la misma estructura que [order details] para obtener el
producto (productid) y la cantidad (quantity) eliminada que debe regresar
a las unidades en estock. Y el trigger quedarÃa de
la siguiente forma:
la siguiente forma:
Create trigger Regresar_Stock
on [order details]
for Delete
as
Update P set P.UnitsInStock=P.UnitsInStock+D.Quantity
from products as P inner join
DELETED as D on D.ProductID=P.ProductID
5. Y cuando ocurre un update
se crean las dos tablas Deleted con el dato antiguo a modificarse y Inserted
con el dato nuevo que va a modificar por lo que el trigger debe de regresar
a inventario lo que esta en Deleted y luego volver a debitar lo que esta
en inserted.
Create trigger Actualizar_Stock
on [order details]
for Updete
as
Update P set P.UnitsInStock=P.UnitsInStock+D.Quantity
from products as P inner join
DELETED as D on D.ProductID=P.ProductID
Update P set P.UnitsInStock=P.UnitsInStock-D.Quantity
from products as P inner join
INSERTED as D on D.ProductID=P.ProductID
0 comentarios:
Publicar un comentario
Dudas y sugerencias aqui