Está en la página 1de 5

------------------------------------------------ACTIVIDAD

136------------------------------------------------
IF DB_ID('EJEMPLO16') IS NOT NULL
BEGIN
DROP DATABASE EJEMPLO16
END
GO
CREATE DATABASE EJEMPLO16
GO
USE EJEMPLO16
GO
CREATE TABLE ARTICULOS(
CODART VARCHAR(6) PRIMARY KEY,
NOMART VARCHAR(50),
STOCK INT,
PRECIO NUMERIC(8,2)
)
GO
CREATE TABLE INGRESOS(
CODART VARCHAR(6),
FECHA DATE,
CANTIDAD INT,
PRECIO NUMERIC(8,2)
CONSTRAINT FK1 FOREIGN KEY (CODART) REFERENCES ARTICULOS
)
GO
CREATE TABLE CLIENTES (
CODCLI VARCHAR(6) PRIMARY KEY,
NOMCLI VARCHAR(50),
RUCCLI INT,
DIRECCION VARCHAR(50) DEFAULT 'DESCONOCIDA'
)
GO
CREATE TABLE BOLETAS(
NROBOL VARCHAR(10) PRIMARY KEY NONCLUSTERED,
CODCLI VARCHAR(6),
FECHA DATE,
TOTAL NUMERIC(8,2),
CONSTRAINT FK2 FOREIGN KEY (CODCLI) REFERENCES CLIENTES
)
GO
CREATE TABLE DETALLES(
NROBOL VARCHAR (10),
CODART VARCHAR (6),
CANTIDAD INT,
IMPORTE NUMERIC (8,2),
PRIMARY KEY NONCLUSTERED (NROBOL,CODART),
CONSTRAINT FK3 FOREIGN KEY (NROBOL) REFERENCES BOLETAS,
CONSTRAINT FK4 FOREIGN KEY (CODART) REFERENCES ARTICULOS
)
------------------------------------------------ACTIVIDAD
137------------------------------------------------:CREAR UN DISIPADOR QUE PERMITA
AGREGAR CLIENTES CON CODIGO CORRELATIVO (1,2,3)

GO
CREATE TRIGGER TRG_137
ON CLIENTES
INSTEAD OF INSERT
AS BEGIN
DECLARE @COD VARCHAR(6), @NOM VARCHAR (50), @RUC INT, @DIR VARCHAR (50)
SELECT @NOM=NOMCLI,@RUC = RUCCLI, @DIR = DIRECCION FROM inserted
SET @COD = (SELECT ISNULL(MAX(CODCLI),0) FROM CLIENTES) + 1
INSERT INTO CLIENTES VALUES (@COD, @NOM, @RUC, @DIR)
END

insert into clientes values ('','LUIS MUOZ',12345678,'CALLE UNO')


insert into clientes values('','JUAN LOPEZ',12345678,'CALLE DOS')
insert into clientes values('','MARIA PERALTA',12345678,'CALLE TRES')
insert into clientes values('','RODRIGO PEREZ',12345678,'CALLE CUATRO')
insert into clientes values('','CARLOS SANCHEZ',12345678,'CALLE CINCO')

SELECT * FROM CLIENTES


INSERT INTO CLIENTES(NOMCLI,RUCCLI) VALUES('MARTIN LOPEZ', 12345)
------------------------------------------------ACTIVIDAD
138------------------------------------------------PERMITA AGREGAR ARTICULOS CON
CODIGO AUTOGENERADO (ART001,ART002)
GO
CREATE TRIGGER TRG_138
ON ARTICULOS
INSTEAD OF INSERT
AS BEGIN
DECLARE @COD VARCHAR(6), @NOM VARCHAR (50), @STOCK INT, @PRECIO NUMERIC(8,2)
SELECT @NOM=NOMART,@STOCK = STOCK, @PRECIO = PRECIO FROM inserted
SET @COD = RIGHT ((SELECT ISNULL(MAX(CODART),'0') FROM ARTICULOS),3) + 1
SET @COD = 'ART' + RIGHT ('000' + @COD,3)
INSERT INTO ARTICULOS VALUES (@COD, @NOM, @STOCK, @PRECIO)
END

TRUNCATE TABLE ARTICULOS


INSERT INTO ARTICULOS VALUES ('','MOUSE NADIVEO',0,120)
INSERT INTO ARTICULOS VALUES ('','TECLADO NAVIDEO',0,90)
INSERT INTO ARTICULOS VALUES ('','PARLANTE NADIVEO',0,100)
INSERT INTO ARTICULOS VALUES ('','CAMARA NAVIDEO',0,110)
SELECT * FROM ARTICULOS

------------------------------------------------ACTIVIDAD
139------------------------------------------------MODIFICAR EL DISIPADOR ANTERIOR
PARA --VERIFICAR LA DUPLICIDAD DE PRODUCTOS DE SER ASI SE ACTUALIZARA EL STOCK

GO
ALTER TRIGGER TRG_138
ON ARTICULOS
INSTEAD OF INSERT
AS BEGIN
DECLARE @COD VARCHAR(6), @NOM VARCHAR (50), @STOCK INT, @PRECIO NUMERIC(8,2)
DECLARE @NEW_STOCK INT
SELECT @NOM=NOMART,@STOCK = STOCK, @PRECIO = PRECIO FROM inserted
IF EXISTS (SELECT NOMART FROM ARTICULOS WHERE NOMART = @NOM)
BEGIN
SET @NEW_STOCK = (SELECT STOCK FROM ARTICULOS WHERE NOMART =
@NOM)
SET @NEW_STOCK = @NEW_STOCK + @STOCK
UPDATE ARTICULOS SET STOCK = @NEW_STOCK WHERE NOMART = @NOM
END
ELSE
BEGIN
SET @COD = RIGHT ((SELECT ISNULL(MAX(CODART),'0') FROM
ARTICULOS),3) + 1
SET @COD = 'ART' + RIGHT ('000' + @COD,3)
INSERT INTO ARTICULOS VALUES (@COD, @NOM, @STOCK, @PRECIO)
END
END

DELETE FROM ARTICULOS


INSERT INTO ARTICULOS VALUES ('','MOUSE NADIVEO',10,120)
INSERT INTO ARTICULOS VALUES ('','TECLADO NAVIDEO',10,90)
INSERT INTO ARTICULOS VALUES ('','PARLANTE NADIVEO',10,100)
INSERT INTO ARTICULOS VALUES ('','CAMARA NAVIDEO',10,110)
SELECT * FROM ARTICULOS

------------------------------------------------ACTIVIDAD
140------------------------------------------------MODIFICAR EL DISIPADOR ANTERIOR
PARA REGISAR LOS INGRESOS DE LOS ARTICULOS COMO DATOS HISTORICOS
GO
ALTER TRIGGER TRG_138
ON ARTICULOS
INSTEAD OF INSERT
AS BEGIN
DECLARE @COD VARCHAR(6), @NOM VARCHAR (50), @STOCK INT, @PRECIO NUMERIC(8,2)
DECLARE @NEW_STOCK INT, @FECHA DATE
SELECT @NOM=NOMART,@STOCK = STOCK, @PRECIO = PRECIO FROM inserted
IF EXISTS (SELECT NOMART FROM ARTICULOS WHERE NOMART = @NOM)
BEGIN
SET @NEW_STOCK = (SELECT STOCK FROM ARTICULOS WHERE NOMART =
@NOM)
SET @NEW_STOCK = @NEW_STOCK + @STOCK
UPDATE ARTICULOS SET STOCK = @NEW_STOCK WHERE NOMART = @NOM
INSERT INTO INGRESOS VALUES (@COD,@FECHA,@STOCK,@PRECIO)
END
ELSE
BEGIN
SET @COD = RIGHT ((SELECT ISNULL(MAX(CODART),'0') FROM
ARTICULOS),3) + 1
SET @COD = 'ART' + RIGHT ('000' + @COD,3)
SET @FECHA = GETDATE()
INSERT INTO ARTICULOS VALUES (@COD, @NOM, @STOCK, @PRECIO)
INSERT INTO INGRESOS VALUES (@COD,@FECHA,@STOCK,@PRECIO)
END
END

DELETE FROM ARTICULOS


INSERT INTO ARTICULOS VALUES ('','MOUSE NADIVEO',10,120)
INSERT INTO ARTICULOS VALUES ('','TECLADO NAVIDEO',10,90)
INSERT INTO ARTICULOS VALUES ('','PARLANTE NADIVEO',10,100)
INSERT INTO ARTICULOS VALUES ('','CAMARA NAVIDEO',10,110)
INSERT INTO ARTICULOS VALUES ('','USB NAVIDEO',10,80)

SELECT * FROM ARTICULOS


SELECT * FROM INGRESOS

------------------------------------------------ACTIVIDAD
141------------------------------------------------DISIPADOR QUE PERMITA EMITIR UN
BOLETA DE VENTAS CON CODIGO AUTOGENERADO VALIDANDO LA EXISTENCIA DEL CLIENTE Y
ASIGNANDO CERO AL VALOR POR DEFECTO DEL TOTAL DE LA BOLETA.
GO
CREATE TRIGGER TRG_141
ON BOLETAS
INSTEAD OF INSERT
AS
BEGIN
DECLARE @NRO VARCHAR (10), @CODCLI VARCHAR (8), @FEC DATE, @TOT NUMERIC (8,2)
SELECT @CODCLI = CODCLI FROM inserted
IF EXISTS (SELECT * FROM CLIENTES WHERE CODCLI = @CODCLI)
BEGIN
SET @TOT = 0
SET @NRO = RIGHT ((SELECT ISNULL(MAX(NRBOL),'0') FROM
BOLETAS),6)+1
SET @NRO = '001-'+RIGHT('000000'+@NRO,6)
SET @FEC = GETDATE()
INSERT INTO BOLETAS VALUES (@NRO,@CODCLI,@FEC,@TOT)
END
ELSE
BEGIN
SELECT 'EL CLIENTE NO EXISTE' AVSO
END
END

INSERT INTO BOLETAS (CODCLI) VALUES ('1')


INSERT INTO BOLETAS (CODCLI) VALUES ('2')
INSERT INTO BOLETAS (CODCLI) VALUES ('3')
INSERT INTO BOLETAS (CODCLI) VALUES ('4')
INSERT INTO BOLETAS (CODCLI) VALUES ('5')

SELECT * FROM BOLETAS


SELECT * FROM CLIENTES

------------------------------------------------ACTIVIDAD
142------------------------------------------------PERMITA REGISTRAR UN DETALLE DE
VENTA VERIFICANDO
-- LA EXISTENCIA DEL NUMERO DE BOLETA
--LA EXISTENCIA DEL CODIO DE SUMINISTRO
--LA DISPONIBILDAD DE STOCK
--CALCULAR EL IMPORTE Y ACTUALIZAR EL STOCK DEL ARTICULO

GO
CREATE TRIGGER TRG_142
ON DETALLES
INSTEAD OF INSERT
AS BEGIN
DECLARE @NROBOL VARCHAR(10),@CODART VARCHAR(10),@CANTIDAD INT,@IMPORTE NUMERIC(8,2)
DECLARE @STOCK INT,@PRECIO NUMERIC(8,2)
SELECT @NROBOL=NROBOL FROM inserted
SELECT @CODART=CODART FROM inserted
SELECT @CANTIDAD=CANTIDAD FROM inserted
IF EXISTS (SELECT * FROM BOLETAS WHERE NRBOL=@NROBOL)
BEGIN
IF EXISTS (SELECT * FROM ARTICULOS WHERE CODART=@CODART)
BEGIN
SET @STOCK=(SELECT STOCK FROM ARTICULOS WHERE
CODART=@CODART)
IF(@CANTIDAD<=@STOCK)
BEGIN
SET @PRECIO=(SELECT PRECIO FROM ARTICULOS
WHERE CODART=@CODART)
SET @IMPORTE=(@PRECIO*@CANTIDAD)
INSERT INTO DETALLES VALUES
(@NROBOL,@CODART,@CANTIDAD,@IMPORTE)
UPDATE ARTICULOS SET STOCK=(STOCK-
@CANTIDAD) WHERE CODART=@CODART
UPDATE BOLETAS SET TOTAL=@IMPORTE WHERE
NRBOL=@NROBOL
END
ELSE
BEGIN
PRINT 'NO HAY STOCK SUFICIENTE'
END
END
ELSE
BEGIN
PRINT 'EL ARTICULO NO EXISTE'
END
END
ELSE
BEGIN
PRINT 'EL NUMERO DE BOLETA NO EXISTE'
END
END

INSERT INTO DETALLES (NROBOL,CODART,CANTIDAD) VALUES ('001-000001','ART001',2)


INSERT INTO DETALLES (NROBOL,CODART,CANTIDAD) VALUES ('001-000002','ART002',2)
INSERT INTO DETALLES (NROBOL,CODART,CANTIDAD) VALUES ('001-000003','ART003',2)
INSERT INTO DETALLES (NROBOL,CODART,CANTIDAD) VALUES ('001-000004','ART004',2)
INSERT INTO DETALLES (NROBOL,CODART,CANTIDAD) VALUES ('001-000005','ART005',2)

SELECT * FROM DETALLES


SELECT * FROM ARTICULOS

También podría gustarte