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