1. Un ejemplo de triggers para el control de Stock.
Comandos:
USE master
GO
IF EXISTS (SELECT NAME FROM sys.databases
WHERE name = 'StockArticulos')
BEGIN
DROP DATABASE StockArticulos
END
CREATE DATABASE StockArticulos
GO
Comandos:
USE StockArticulos
GO
CREATE TABLE dbo.Articulos (ID INT PRIMARY KEY, NOMBRE
VARCHAR(100),STOCK DECIMAL (18,2))
GO
CREATE TABLE dbo.Movimientos (TRANSACCION INT,FECHA
DATE DEFAULT(GETDATE()),ARTICULO_ID INT FOREIGN
KEY
REFERENCES
DBO.ARTICULOS(ID),CANTIDAD DECIMAL(18,2),
TIPO CHAR(1) CHECK (TIPO ='I' OR TIPO = 'O'))
GO
2. Insertamos registros a la tabla Artículos.
Comandos:
INSERT INTO
dbo.Articulos(ID,NOMBRE,STOCK) VALUES
(1,'Monitores',0),(2,'CPU',0),(3,'Mouse',0)
GO
3. Creamos los triggers para tener actualizado los
artículos.No retorna el mensaje de cantidad de registros afectados.
Comandos:
CREATE TRIGGER dbo.MovimientosInsert ON
dbo.Movimientos
FOR INSERT
AS
BEGIN
SET NOCOUNT ON
UPDATE DBO.ARTICULOS
SET STOCK = STOCK + T.PARCIAL
FROM DBO.ARTICULOS A
INNER JOIN
( SELECT ARTICULO_ID,
SUM(CASE WHEN TIPO='I' THEN CANTIDAD ELSE –
CANTIDAD END)
AS PARCIAL FROM INSERTED
GROUP BY ARTICULO_ID) T
ON
A.ID = T.ARTICULO_ID
END
GO
4. Creamos los triggers para tener actualizado los
artículos.No retorna el mensaje de cantidad de registros afectados.
Comandos:
CREATE TRIGGER dbo.Movimientosdelete ON dbo.Movimientos
FOR INSERT
AS
BEGIN
SET NOCOUNT ON
UPDATE dbo.Articulos
SET STOCK = STOCK - T.PARCIAL
FROM dbo.Articulos A
INNER JOIN
( SELECT ARTICULO_ID,
SUM(CASE WHEN TIPO='I' THEN CANTIDAD ELSE –
CANTIDAD END)
AS PARCIAL FROM DELETED
GROUP BY ARTICULO_ID) T
ON
A.ID = T.ARTICULO_ID
END
GO
5. Mostremos el Stock actual.
Comandos:
SELECT A.ID, A.NOMBRE, A.STOCK FROM dbo.Articulos A
6. Insertemos un registro para el artículo 1.
Comandos:
INSERT INTO dbo.Movimientos
(TRANSACCION,ARTICULO_ID,FECHA,CANTIDAD,TIPO)
VALUES (1,1,GETDATE(),100,'I')
7. Mostremos el Stock
actual para el ID 1
Comandos:
SELECT
A.ID, A.NOMBRE, A.STOCK FROM dbo.Articulos A
WHERE
A.ID = 1
8. Insertemos otros
registros.
Comandos:
INSERT
INTO dbo.Movimientos
(TRANSACCION,ARTICULO_ID,FECHA,CANTIDAD,TIPO)
VALUES
(2,1,GETDATE(),10,'I'), (3,1,GETDATE(),5,'O'),
(4,2,GETDATE(),5,'I')
9. Mostremos el Stock
actual para el ID 1.
Comandos:
SELECT
A.ID, A.NOMBRE, A.STOCK FROM dbo.Articulos A
WHERE
A.ID = 1
10. Eliminemos la
transacción (1) de cantidad = 100.
Comandos:
DELETE FROM dbo.Movimientos WHERE TRANSACCION = 1
11. Eliminemos la
transacción (3) de cantidad = 5
Comandos:
DELETE FROM dbo.Movimientos WHERE TRANSACCION = 3
12. Mostremos el stock
actual de la tabla Artículos.
Comandos:
SELECT A.ID, A.NOMBRE, A.STOCK FROM
dbo.Articulos A
13. Eliminamos todos
los movimientos realizados.
Comandos:
DELETE FROM dbo.Movimientos
14. Deshabilitar los
triggers.
Comandos:
ALTER TABLE dbo.Movimientos DISABLE TRIGGER ALL
15.Mostremos lo que pasa se
insertamos un registro en la tabla. Movimientos que tiene deshabilitados los
triggers.
Comandos:
INSERT
INTO dbo.Movimientos
(TRANSACCION,ARTICULO_ID,FECHA,CANTIDAD,TIPO)
VALUES (1,1,GETDATE(),100,'I')
16. Mostremos el stock
actual de la tabla Artículos.
Comandos:
SELECT A.ID, A.NOMBRE, A.STOCK FROM
dbo.Articulos A
No hay comentarios:
Publicar un comentario