none
Creación de trigger RRS feed

  • Pregunta

  • Tengo el siguiente Trigger que funciona bien lo que hace es que no deja insertar valores que estén en  0 pero fuera de eso necesito que solo admita valores enteros es decir si agregan 12.00000 lo deje insertar pero si agregan 12.00100  este no lo deje este campo de cantidad esta definido en la tabla como numeric(20, 6) osea que puede guardar  6 decimales  

    Código

    ALTER TRIGGER Tr_Articulos_Restringidos_Numero
    ON  [dbo].[tblmvtoinventarios]  FOR INSERT 
    AS
    
    IF EXISTS(
                SELECT *
                FROM  inserted i
                INNER JOIN tblarticulos a ON i.codigo = a.codigo 
                WHERE  a.codunidad = 'Und.'
                AND ISNUMERIC (i.cantidad) < 0
            )
    BEGIN
        ROLLBACK TRANSACTION;
        RAISERROR ('No se puede hacer la insercion de esta factura si la cantidad tiene el valor 0 comunicate con el area de sistemas',
                                                    -- Message text.  
                    16,                           -- Severity.  
                    1                             -- State.  
                    );
    END
    GO


    martes, 30 de julio de 2019 18:21

Todas las respuestas

  • Deleted
    martes, 30 de julio de 2019 22:04
  • Hola EstebanGiraldo:

    Y porque no crear una restricción en la propia columna y así no tienes porque hacer el trigger.

    /* Creación de escenario de ejemplo */
    CREATE TABLE TbImvotoinventarios (codUnidad int, cantidad numeric(20,6))
    go
    insert into TbImvotoinventarios (codUnidad, cantidad) values (1,100);
    go
    
    /* Creo la restricción sobre la columna cantidad */
    alter table TbImvotoinventarios
    add constraint chkColCantidad
    check (cantidad >= 0 and cantidad <= 1200000);
    go

    Con la restricción creada.

    -- Insercción en el rango
    insert into TbImvotoinventarios (codUnidad, cantidad)
    values (2,1000);
    
    --OK
    go
    
    -- Insercción fuera de rango
    insert into TbImvotoinventarios (codUnidad, cantidad)
    values (2,-1);
    go

    Mens. 547, Nivel 16, Estado 0, Línea 13
    Instrucción INSERT en conflicto con la restricción CHECK 'chkColCantidad'.

    El conflicto ha aparecido en la base de datos 'foros', tabla 'dbo.TbImvotoinventarios', column 'cantidad'.
    Se terminó la instrucción.

    -- Inserccion en rango
    insert into TbImvotoinventarios (codUnidad, cantidad)
    values (2,1200000);
    
    -- OK
    go
    -- Insercción fuera de rango
    insert into TbImvotoinventarios (codUnidad, cantidad)
    values (2,1200001);
    

    Mens. 547, Nivel 16, Estado 0, Línea 19
    Instrucción INSERT en conflicto con la restricción CHECK 'chkColCantidad'. El conflicto ha aparecido en la base de datos 'foros', tabla 'dbo.TbImvotoinventarios', column 'cantidad'.
    Se terminó la instrucción.

    Creación de restricciones

    https://docs.microsoft.com/es-es/sql/relational-databases/tables/create-check-constraints?view=sql-server-2017

    miércoles, 31 de julio de 2019 3:57