Caso en SQL Server BD Practica2 usando Triggers
En esta ocasión realizaremos un caso en SQL Server usando los triggers para conocer su sintaxis y funcionamiento.
Crear la base de datos PRACTICA2 con la tabla productos, ingresar datos y luego crear un trigger para ingresar productos con código correlativo.
USE MASTER CREATE DATABASE PRACTICA2 USE PRACTICA2 --- CREATE TABLE PRODUCTOS( IDPRO varchar(6) NOT NULL primary key, NOMBREPRO varchar(50) NOT NULL, PRECIOPRO decimal(8, 2) NOT NULL, STOCKPRO int NOT NULL); --- INSERT INTO PRODUCTOS VALUES ('PRO001','Alcohol en Gel 360ml',10.0,50); INSERT INTO PRODUCTOS VALUES ('PRO002','Galon de lejia 7.5% Hipoclorito de Sodio',20,50); INSERT INTO PRODUCTOS VALUES ('PRO003','Paños Absorventes Virutex',15.00,50); INSERT INTO PRODUCTOS VALUES ('PRO004','Par de Guantes Multiusos de nitrilo Virutex',5.00,50); INSERT INTO PRODUCTOS VALUES ('PRO005','Galon limpia vidrios marca Daryza',16.00,50); --- CREATE TRIGGER TR_CORRELATIVO ON PRODUCTOS INSTEAD OF INSERT AS BEGIN DECLARE @codigo as varchar(6); SET @codigo=(SELECT ('PRO'+RIGHT('00'+CONVERT(VARCHAR,CONVERT(int,SUBSTRING(MAX(IDPRO),4,3))+1),(3))) from PRODUCTOS); DECLARE @nombrepro as varchar(50); DECLARE @preciopro as decimal(8,2); DECLARE @stockpro as int; SET @nombrepro=(SELECT NOMBREPRO from inserted); SET @preciopro=(SELECT PRECIOPRO from inserted); SET @stockpro=(SELECT STOCKPRO from inserted); INSERT INTO PRODUCTOS VALUES (@codigo,@nombrepro,@preciopro,@stockpro); END;
Modificar el trigger anterior para que no permita ingresar dos productos con el mismo nombre
ALTER TRIGGER TR_CORRELATIVO ON PRODUCTOS INSTEAD OF INSERT AS BEGIN DECLARE @codigo as varchar(6); SET @codigo=(SELECT ('PRO'+RIGHT('00'+CONVERT(VARCHAR,CONVERT(int,SUBSTRING(MAX(IDPRO),4,3))+1),(3))) from PRODUCTOS); DECLARE @nombrepro as varchar(50); DECLARE @preciopro as decimal(8,2); DECLARE @stockpro as int; SET @nombrepro=(SELECT NOMBREPRO from inserted); SET @preciopro=(SELECT PRECIOPRO from inserted); SET @stockpro=(SELECT STOCKPRO from inserted); DECLARE @duplicado as INT; SET @duplicado=(SELECT COUNT(IDPRO) from PRODUCTOS where NOMBREPRO=@nombrepro); IF (@duplicado>0) BEGIN RAISERROR ('El nombre del producto ya existe' ,10,1); END ELSE BEGIN INSERT INTO PRODUCTOS VALUES (@codigo,@nombrepro,@preciopro,@stockpro); END END; INSERT INTO PRODUCTOS VALUES ('df354','JABON BOLIVAR',5,3);
Crear un trigger que no permita eliminar productos con stock diferentes de cero.
CREATE TRIGGER TR_ELIMINAR_STOCK ON PRODUCTOS INSTEAD OF DELETE AS BEGIN DECLARE @codigo as varchar(6); DECLARE @nombrepro as varchar(50); DECLARE @preciopro as decimal(8,2); DECLARE @stockpro as int; SET @codigo=(SELECT IDPRO from deleted); SET @stockpro=(SELECT STOCKPRO from PRODUCTOS where IDPRO=@codigo); IF (@stockpro>0) BEGIN RAISERROR ('El producto aun tiene stock disponible' ,10,1); END ELSE BEGIN DELETE from PRODUCTOS where IDPRO=@codigo; END END; DELETE from PRODUCTOS where IDPRO='PRO005'
Publicar un comentario
0 Comentarios