Caso en SQL Server BD Practica2 usando Triggers

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

Guardar mi nombre, correo electrónico y sitio web en este navegador la próxima vez que comente

0 Comentarios