ejercicios de triggers (i)
TRANSCRIPT
Ejercicios de triggers (I).
Alejandro Alonso Taratiel. 1 ASIR. Base de datos. Prof.: Santiago Blanco. .
NDICE
Ejemplos de triggers..................................................................................................- 2 Ejemplo_1 .............................................................................................................- 2 Probamos el ejemplo_1. ........................................................................................- 7 -
Pgina - 1 - de 19
Bases de Datos.
Alejandro Alonso Taratiel
01/06/2012
Ejemplos de triggers.Ejemplo_11. 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 Resultados: Command(s) completed successfully.
Pgina - 2 - de 19
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 Resultados: Command(s) completed successfully.
Pgina - 3 - de 19
Bases de Datos.
Alejandro Alonso Taratiel
01/06/2012
2. Insertamos registros a la tabla Artculos. Comandos: INSERT INTO dbo.Articulos(ID,NOMBRE,STOCK) VALUES (1,'Monitores',0),(2,'CPU',0),(3,'Mouse',0) GO Resultados: (3 row(s) affected)
Pgina - 4 - de 19
3. Creamos los triggers para tener actualizado los artculos. 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 Resultados: Command(s) completed successfully.
Pgina - 5 - de 19
Bases de Datos.
Alejandro Alonso Taratiel
01/06/2012
4. Creamos los triggers para tener actualizado los artculos. 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 Resultados: Command(s) completed successfully.
Pgina - 6 - de 19
Probamos el ejemplo_1.5. Mostremos el Stock actual. Comandos: SELECT A.ID, A.NOMBRE, A.STOCK FROM dbo.Articulos A Resultados: 1 2 3 Monitores CPU Mouse 0.00 0.00 0.00
Pgina - 7 - de 19
Bases de Datos.
Alejandro Alonso Taratiel
01/06/2012
6. Insertemos un registro para el artculo 1. Comandos: INSERT INTO dbo.Movimientos (TRANSACCION,ARTICULO_ID,FECHA,CANTIDAD,TIPO) VALUES (1,1,GETDATE(),100,'I') Resultados: (1 row(s) affected)
Pgina - 8 - de 19
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 Resultados: 1 Monitores 100.00
Pgina - 9 - de 19
Bases de Datos.
Alejandro Alonso Taratiel
01/06/2012
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') Resultados: (3 row(s) affected)
Pgina - 10 - de 19
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 Resultados: 1 Monitores 105.00
Pgina - 11 - de 19
Bases de Datos.
Alejandro Alonso Taratiel
01/06/2012
10. Eliminemos la transaccin (1) de cantidad = 100. Comandos: DELETE FROM dbo.Movimientos WHERE TRANSACCION = 1 Resultados: (1 row(s) affected)
Pgina - 12 - de 19
11. Eliminemos la transaccin (3) de cantidad = 5 Comandos: DELETE FROM dbo.Movimientos WHERE TRANSACCION = 3 Resultados: (1 row(s) affected)
Pgina - 13 - de 19
Bases de Datos.
Alejandro Alonso Taratiel
01/06/2012
12. Mostremos el stock actual de la tabla Artculos. Comandos: SELECT A.ID, A.NOMBRE, A.STOCK FROM dbo.Articulos A Resultados: 1 2 3 Monitores CPU Mouse 105.00 5.00 0.00
Pgina - 14 - de 19
13. Eliminamos todos los movimientos realizados. Comandos: DELETE FROM dbo.Movimientos Resultados: (2 row(s) affected)
Pgina - 15 - de 19
Bases de Datos.
Alejandro Alonso Taratiel
01/06/2012
14. Deshabilitar los triggers. Comandos: ALTER TABLE dbo.Movimientos DISABLE TRIGGER ALL Resultados: Command(s) completed successfully.
Pgina - 16 - de 19
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') Resultados: (1 row(s) affected)
Pgina - 17 - de 19
Bases de Datos.
Alejandro Alonso Taratiel
01/06/2012
16. Mostremos el stock actual de la tabla Artculos. Comandos: SELECT A.ID, A.NOMBRE, A.STOCK FROM dbo.Articulos A Resultados: 1 2 3 Monitores CPU Mouse 105.00 5.00 0.00
Pgina - 18 - de 19