lunes, 26 de septiembre de 2011

[INF-272] PROYECTO : Triggers

--****************************
--TRIGGERS********************
--****************************

--1.- COMPROBAR LOS DATOS, VERIFICANDO QUE LA MESA EXISTA AL INSERTAR UNA NUEVA
--COMANDA
CREATE TRIGGER T1
ON PEDIDOS
INSTEAD OF INSERT
AS
BEGIN
    PRINT @@ROWCOUNT
    IF (EXISTS(SELECT * FROM INSERTED I, MESAS M
                WHERE M.ID_MESA=I.ID_MESA))
    BEGIN
        PRINT 'Adicionando'
        INSERT INTO PEDIDOS (ID_COMANDA,OBJ_VERSION,ESTADO_BD,
        NRO_PEDIDO,ESTADO,ID_MESA,ID_MESERO)
        SELECT ID_COMANDA,OBJ_VERSION,ESTADO_BD,
        NRO_PEDIDO,ESTADO,ID_MESA,ID_MESERO FROM INSERTED
    END   
    ELSE
    BEGIN
        PRINT 'NO EXITE MESA'
        ROLLBACK TRAN
    END   
END

--2.-COMPROBAR LOS DATOS, VERIFICANDO QUE EL CLIENTE ESTE REGISTRADO
--ANTES DE INSERTARLO EN EL CONTRATO 
CREATE TRIGGER T2
ON CONTRATOS
INSTEAD OF INSERT
AS
BEGIN
    PRINT @@ROWCOUNT
    IF(EXISTS (SELECT * FROM CLIENTES C, INSERTED I
                WHERE C.ID_CLIENTE = I.ID_CLIENTE))
    BEGIN
        PRINT 'ADICIONANDO'
        INSERT INTO CONTRATOS ( ID_CONTRATO,OBJ_VERSION,ESTADO_BD,
        NRO_CONTRATO, FECHA_PAGO, NRO_PERSONAS, FECHA_EVENTO,
        HORA_EVENTO,LUGAR,TIPO_SERVICIO, MONTO_TOTAL,ID_CLIENTE,
        ID_TARIFA, ID_ORDEN) SELECT ID_CONTRATO,OBJ_VERSION,ESTADO_BD,
        NRO_CONTRATO, FECHA_PAGO, NRO_PERSONAS, FECHA_EVENTO,
        HORA_EVENTO,LUGAR,TIPO_SERVICIO, MONTO_TOTAL,ID_CLIENTE,
        ID_TARIFA, ID_ORDEN FROM INSERTED
    END
    ELSE
    BEGIN
        PRINT 'NO EXISTE CLIENTE!!'
        PRINT 'REGISTRE AL NUEVO CLIENTE ANTES DE PROCEDER'
        ROLLBACK TRAN
    END
END

[INF-272] PROYECTO : Indices y Sinonimos

--****************************
--INDICES*Y*SINONIMOS*********
--****************************

--1.- CREAR UN INDICE PARA LOS CLIENTES SEGUN SU NIT
CREATE INDEX IN_CLIENTE
ON CLIENTES (NIT)

--2.- CREAR UN INDICE PARA LAS MESAS SEGUN LA SALA Y EL ESTADO
CREATE INDEX IN_MESAS
ON MESAS (ESTADO,ID_SALA)

--3.- CREAR UN SINONIMO PARA LOS PRODUCTOS
CREATE SYNONYM ALIMENTO FOR PRODUCTOS
SELECT * FROM ALIMENTO

--4.- CREAR UN SINONIMO PARA VENTAS
CREATE SYNONYM FACTURA FOR VENTAS
SELECT * FROM FACTURA

[INF-272] PROYECTO : Reglas y checks

--****************************
--REGLAS Y CHECKS*************
--****************************

--1.- CREAR UN CHECK PARA LIMITAR CONTROLAR LOS ESTADOS QUE
--PUEDE TENER UNA MESA

--SOL CON CHECKS
CREATE TABLE MESAS(
    id_mesa int not null,
    obj_version int,
    estado_bd bit,
    nro_mesa int,
    ubiacion_x int,
    ubiacion_y int,
    estado varchar(255),
    id_sala int,
    CHECK (ESTADO='NO DISPONIBLE' OR ESTADO='DISPONIBLE')
)

--SOL CON REGLAS
CREATE RULE REGLA1
AS
    @ESTADO = 'NO DIPONIBLE' OR @ESTADO ='DISPONIBLE'
SP_BINDRULE REGLA1,'MESAS.ESTADO'

--2.- CREAR UNA REGLAS PARA CONTROLAR QUE LA FECHA DE PAGO
-- DE LOS CONTRATOS SEA ANTERIOR A LA FECHA ACTUAL

--SOL CON CHECKS
CREATE TABLE CONTRATOS2(   
    id_contrato int not null,
    obj_version int,
    estado_bd bit,
    nro_contrato int,
    fecha_pago datetime,
    nro_personas int,
    fecha_evento datetime,
    hora_evento datetime,
    lugar varchar (255),
    tipo_servicio varchar (255),
    monto_total numeric (19,2),
    id_cliente int,
    id_tarifa int,
    id_orden int,
    CHECK (FECHA_PAGO > GETDATE())
)

--SOL CON REGLAS
CREATE RULE REGLA2
AS
    @FECHA_PAGO > GETDATE()
SP_BINDRULE REGLA2,'CONTRATOS.FECHA_PAGO'