ejercicios de triggers (i)

19
  Ejercicios de triggers (I).   Alejandro Alonso Taratiel. 1º ASIR. Base de datos. Prof.: Santiago Blanco.

Upload: vlexxx

Post on 22-Jul-2015

555 views

Category:

Documents


0 download

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