Ejercicios de triggers
Ejercicios de triggers
(I).
(I).
Alejandro Alonso Taratiel.
Alejandro Alonso Taratiel.
1º ASIR.
1º ASIR.
Base de datos.
Base de datos.
Prof.: Santiago Blanco.
Prof.: Santiago Blanco.
Página - 1 - de 19 Página - 1 - de 19
ÍNDICE
ÍNDICE
Ejemplos de triggers... 2 Ejemplos de triggers... 2 -Ejem Ejemplo_1 ...plo_1 ...- ...- 2 2 Probamos el ejemplo_1. ... 7 Probamos el ejemplo_1. ... 7-Página - 2 - de 19 Página - 2 - de 19
Ejemplos de triggers.
Ejemplos de triggers.
Ejemplo_1
Ejemplo_1
1.1. Un ejemplo de triggers para el control de Stock.Un ejemplo de triggers para el control de Stock. Comandos: Comandos: USE master USE master GO GO IF EXISTS
IF EXISTS (SELECT NAME FROM sys.databases(SELECT NAME FROM sys.databases WHERE name = 'StockArticulos')
WHERE name = 'StockArticulos') BEGIN
BEGIN
DROP DATABASE StockArticulos DROP DATABASE StockArticulos END
END
CREATE DATABASE Sto
CREATE DATABASE StockArticulckArticulosos GO
GO Resultados: Resultados:
Command(s) completed successfully. Command(s) completed successfully.
Página - 3 - de 19 Página - 3 - de 19 Comandos: Comandos: USE StockArticulos USE StockArticulos GO GO
CREATE TABLE dbo.Articulos (ID INT PRIMARY KEY,
CREATE TABLE dbo.Articulos (ID INT PRIMARY KEY, NOMBRENOMBRE VARCHAR(100
VARCHAR(100),STOCK DECIMAL ),STOCK DECIMAL (18,2))(18,2)) GO
GO
CREATE TABLE dbo.Movimientos (TRANSACCION I
CREATE TABLE dbo.Movimientos (TRANSACCION INT,FECHANT,FECHA DATE DEFAULT(GETDATE()),ARTICU
DATE DEFAULT(GETDATE()),ARTICULO_ID INT LO_ID INT FOREIGN KEYFOREIGN KEY REFERENCES DBO.ARTICULOS(ID),CANTIDA
REFERENCES DBO.ARTICULOS(ID),CANTIDAD D DECIMAL(18,2),DECIMAL(18,2), TIPO CHAR(1) CHECK (TIPO ='I' OR TIPO =
TIPO CHAR(1) CHECK (TIPO ='I' OR TIPO = 'O'))'O')) GO
GO Resultados: Resultados:
Command(s) completed successfully. Command(s) completed successfully.
Página - 4 - de 19 Página - 4 - de 19 2.
2. Insertamos registros a la tabla Artículos.Insertamos registros a la tabla Artículos. Comandos:
Comandos: INSERT I
INSERT INTO dbo.Articulos(ID,NOMBRNTO dbo.Articulos(ID,NOMBRE,STOCK) VE,STOCK) VALUESALUES (1,'Monitores',0),(2,'CPU',0),(3,'Mouse',0) (1,'Monitores',0),(2,'CPU',0),(3,'Mouse',0) GO GO Resultados: Resultados: (3 row(s) affected) (3 row(s) affected)
Página - 5 - de 19 Página - 5 - de 19 3.
3. Creamos los triggers para tener actualizado los artículos.Creamos los triggers para tener actualizado los artículos. No retorna el mensaje de cantidad de registros afectados. No retorna el mensaje de cantidad de registros afectados. Comandos:
Comandos:
CREATE TRIGGER dbo.MovimientosInse
CREATE TRIGGER dbo.MovimientosInsert rt ON dbo.MovimientosON dbo.Movimientos FOR INSERT FOR INSERT AS AS BEGIN BEGIN SET NOCOUNT ON SET NOCOUNT ON UPDATE DBO.ARTICULOS UPDATE DBO.ARTICULOS
SET STOCK = STOCK + T.PARCIAL SET STOCK = STOCK + T.PARCIAL FROM DBO.ARTICULOS A FROM DBO.ARTICULOS A INNER JOIN INNER JOIN ( SELECT ARTICULO_ID, ( SELECT ARTICULO_ID,
SUM(CASE WHEN TIPO='I' THEN CANTIDA
SUM(CASE WHEN TIPO='I' THEN CANTIDAD ELSE D ELSE --CANTIDAD END)
CANTIDAD END)
AS PARCIAL FROM INSERTED AS PARCIAL FROM INSERTED GROUP BY ARTICULO_ID GROUP BY ARTICULO_ID ) T ) T ON ON A.ID =
A.ID = T.ARTICULT.ARTICULO_IDO_ID END END GO GO Resultados: Resultados:
Command(s) completed successfully. Command(s) completed successfully.
Página - 6 - de 19 Página - 6 - de 19 4.
4. Creamos los triggers para tener actualizado los artículos.Creamos los triggers para tener actualizado los artículos. No retorna el mensaje de cantidad de registros afectados. No retorna el mensaje de cantidad de registros afectados. Comandos:
Comandos:
CREATE TRIGGER dbo.Movimientosdele
CREATE TRIGGER dbo.Movimientosdelete ON te ON dbo.Movimiendbo.Movimientostos FOR INSERT FOR INSERT AS AS BEGIN BEGIN SET NOCOUNT ON SET NOCOUNT ON UPDATE dbo.Articulos UPDATE dbo.Articulos
SET STOCK = STOCK - T.PARCIAL SET STOCK = STOCK - T.PARCIAL FROM dbo.Articulos A FROM dbo.Articulos A INNER JOIN INNER JOIN ( SELECT ARTICULO_ID, ( SELECT ARTICULO_ID,
SUM(CASE WHEN TIPO='I' THEN CANTIDA
SUM(CASE WHEN TIPO='I' THEN CANTIDAD ELSE D ELSE --CANTIDAD END)
CANTIDAD END)
AS PARCIAL FROM DELETED AS PARCIAL FROM DELETED GROUP BY ARTICULO_ID GROUP BY ARTICULO_ID ) T ) T ON ON A.ID =
A.ID = T.ARTICULT.ARTICULO_IDO_ID END END GO GO Resultados: Resultados:
Command(s) completed successfully. Command(s) completed successfully.
Página - 7 - de 19 Página - 7 - de 19
Probamos el ejemplo_1.
Probamos el ejemplo_1.
5.
5. Mostremos el Stock actual.Mostremos el Stock actual. Comandos:
Comandos:
SELECT A.ID, A.NOMBRE, A.STOCK FROM dbo.Articulos A SELECT A.ID, A.NOMBRE, A.STOCK FROM dbo.Articulos A Resultados: Resultados: 1 1 Monitores Monitores 0.000.00 2 2 CPU CPU 0.000.00 3 3 Mouse Mouse 0.000.00
Página - 8 - de 19 Página - 8 - de 19 6.
6. Insertemos un registro para el artículo 1.Insertemos un registro para el artículo 1. Comandos:
Comandos:
INSERT INTO
INSERT INTO dbo.Movimidbo.Movimientosentos
(TRANSACCION,ARTICULO_ID,FECHA,CANTIDAD,TIPO) (TRANSACCION,ARTICULO_ID,FECHA,CANTIDAD,TIPO) VALUES
VALUES (1,1,GETDA(1,1,GETDATE(),100,'I')TE(),100,'I') Resultados:
Resultados:
(1 row(s) affected) (1 row(s) affected)
Página - 9 - de 19 Página - 9 - de 19 7.
7. Mostremos el Stock actual para el ID 1Mostremos el Stock actual para el ID 1 Comandos:
Comandos:
SELECT A.ID, A.NOMBRE, A.STOCK FROM dbo.Articulos A SELECT A.ID, A.NOMBRE, A.STOCK FROM dbo.Articulos A WHERE A.ID = 1 WHERE A.ID = 1 Resultados: Resultados: 1 1 Monitores Monitores 100.00100.00
Página - 10 - de 19 Página - 10 - de 19 8.
8. Insertemos otros registros.Insertemos otros registros. Comandos:
Comandos:
INSERT INTO dbo.Movimientos INSERT INTO dbo.Movimientos
(TRANSACCION,ARTICULO_ID,FECHA,CANTIDAD,TIPO) (TRANSACCION,ARTICULO_ID,FECHA,CANTIDAD,TIPO) VALUES (
VALUES (2,1,GETDA2,1,GETDATE(),10,'I'), TE(),10,'I'), (3,1,GETDA(3,1,GETDATE(),5,'O'),TE(),5,'O'), (4,2,GETDATE(),5,'I') (4,2,GETDATE(),5,'I') Resultados: Resultados: (3 row(s) affected) (3 row(s) affected)
Página - 11 - de 19 Página - 11 - de 19 9.
9. Mostremos el Stock actual para el ID 1.Mostremos el Stock actual para el ID 1. Comandos:
Comandos:
SELECT A.ID, A.NOMBRE, A.STOCK FROM dbo.Articulos A SELECT A.ID, A.NOMBRE, A.STOCK FROM dbo.Articulos A WHERE A.ID = 1 WHERE A.ID = 1 Resultados: Resultados: 1 1 Monitores Monitores 105.00105.00
Página - 12 - de 19 Página - 12 - de 19 10.
10. Eliminemos la transacción (1) de Eliminemos la transacción (1) de cantidad = 100.cantidad = 100. Comandos:
Comandos:
DELETE FROM dbo.Movimientos WHERE TRANSA
DELETE FROM dbo.Movimientos WHERE TRANSACCION = CCION = 11 Resultados:
Resultados:
(1 row(s) affected) (1 row(s) affected)
Página - 13 - de 19 Página - 13 - de 19 11.
11. Eliminemos la transaccEliminemos la transacción (3) ión (3) de cantidad = 5de cantidad = 5 Comandos:
Comandos:
DELETE FROM dbo.Movimientos WHERE TRANSA
DELETE FROM dbo.Movimientos WHERE TRANSACCION = CCION = 33 Resultados:
Resultados:
(1 row(s) affected) (1 row(s) affected)
Página - 14 - de 19 Página - 14 - de 19 12.
12. Mostremos el stock actual de la tMostremos el stock actual de la tabla Artículos.abla Artículos. Comandos:
Comandos:
SELECT A.ID, A.NOMBRE, A.STOCK FROM dbo.Articulos A SELECT A.ID, A.NOMBRE, A.STOCK FROM dbo.Articulos A Resultados: Resultados: 1 1 Monitores Monitores 105.00105.00 2 2 CPU CPU 5.005.00 3 3 Mouse Mouse 0.000.00
Página - 15 - de 19 Página - 15 - de 19 13.
13. Eliminamos todos los movimientos realizados.Eliminamos todos los movimientos realizados. Comandos:
Comandos:
DELETE FROM dbo.Movimientos DELETE FROM dbo.Movimientos Resultados:
Resultados:
(2 row(s) affected) (2 row(s) affected)
Página - 16 - de 19 Página - 16 - de 19 14.
14. Deshabilitar los triggers.Deshabilitar los triggers. Comandos:
Comandos:
ALTER TABLE dbo.Movimientos DISABLE TRIGGER ALL ALTER TABLE dbo.Movimientos DISABLE TRIGGER ALL Resultados:
Resultados:
Command(s) completed successfully. Command(s) completed successfully.
Página - 17 - de 19 Página - 17 - de 19 15.
15. Mostremos lo que pasa se insertamos un registro en la tabla.Mostremos lo que pasa se insertamos un registro en la tabla. Movimientos que tiene deshabilitados los triggers.
Movimientos que tiene deshabilitados los triggers. Comandos:
Comandos:
INSERT INTO
INSERT INTO dbo.Movimidbo.Movimientosentos
(TRANSACCION,ARTICULO_ID,FECHA,CANTIDAD,TIPO) (TRANSACCION,ARTICULO_ID,FECHA,CANTIDAD,TIPO) VALUES
VALUES (1,1,GETDA(1,1,GETDATE(),100,'I')TE(),100,'I') Resultados:
Resultados:
(1 row(s) affected) (1 row(s) affected)
Página - 18 - de 19 Página - 18 - de 19 16.
16. Mostremos el stock actual de la tMostremos el stock actual de la tabla Artículos.abla Artículos. Comandos:
Comandos:
SELECT A.ID, A.NOMBRE, A.STOCK FROM dbo.Articulos A SELECT A.ID, A.NOMBRE, A.STOCK FROM dbo.Articulos A Resultados: Resultados: 1 1 Monitores Monitores 105.00105.00 2 2 CPU CPU 5.005.00 3 3 Mouse Mouse 0.000.00