none
Trigger RRS feed

  • Pregunta

  • Hola, quisiera saber como seria un trigger para no permitir un update a un campo, si dicho campo tiene un valor predeterminado , por ejemplo, si el campo estado = 19 no permitir el update .

    Gracias


    leon

    viernes, 24 de febrero de 2017 22:41

Respuestas

  • Leon Abuin,

    Necesitas de un trigger INSTEAD OF, algo como:

    CREATE TRIGGER dbo.NombreTrigger
        ON dbo.NombreTabla
        INSTEAD OF UPDATE
    AS
    BEGIN
        UPDATE t
        SET
    	   t.col1 = i.Col1,
    	   t.col2 = i.Col2,
    	   t.estado = CASE WHEN t.estado = 19 THEN t.estado ELSE i.estado END
        FROM
    	   inserted i	   
    	   INNER JOIN NombreTabla t ON (i.idTabla = t.idTabla)
    END
    GO



    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta Leon Abuin sábado, 25 de febrero de 2017 12:01
    viernes, 24 de febrero de 2017 23:26
  • Hola, quisiera saber como seria un trigger para no permitir un update a un campo, si dicho campo tiene un valor predeterminado , por ejemplo, si el campo estado = 19 no permitir el update .

    Gracias


    leon

    Hola Leon Abuin,

    Tendrías que obtener el 'estado' de la tabla 'deleted' y verificar si el valor es 19 o no.

    Por lo que pienso que bastaría con verificar si el campo a actualizar es 'campo1' y el estado es 19 para deshacer la transacción. 

    create trigger dbo.NombreTrigger
    on miTabla
    for update
    as
    begin
        declare @estado int = (select estado from deleted)
        if(update(campo1) and @estado = 19)
        begin
            raiserror('No se puede actualizar el campo1 porque tiene el estado 19', 10, 1)
    	rollback transaction
        end
    end
    go

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta Leon Abuin sábado, 25 de febrero de 2017 12:02
    sábado, 25 de febrero de 2017 0:51

Todas las respuestas

  • Leon Abuin,

    Necesitas de un trigger INSTEAD OF, algo como:

    CREATE TRIGGER dbo.NombreTrigger
        ON dbo.NombreTabla
        INSTEAD OF UPDATE
    AS
    BEGIN
        UPDATE t
        SET
    	   t.col1 = i.Col1,
    	   t.col2 = i.Col2,
    	   t.estado = CASE WHEN t.estado = 19 THEN t.estado ELSE i.estado END
        FROM
    	   inserted i	   
    	   INNER JOIN NombreTabla t ON (i.idTabla = t.idTabla)
    END
    GO



    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta Leon Abuin sábado, 25 de febrero de 2017 12:01
    viernes, 24 de febrero de 2017 23:26
  • Hola, quisiera saber como seria un trigger para no permitir un update a un campo, si dicho campo tiene un valor predeterminado , por ejemplo, si el campo estado = 19 no permitir el update .

    Gracias


    leon

    Hola Leon Abuin,

    Tendrías que obtener el 'estado' de la tabla 'deleted' y verificar si el valor es 19 o no.

    Por lo que pienso que bastaría con verificar si el campo a actualizar es 'campo1' y el estado es 19 para deshacer la transacción. 

    create trigger dbo.NombreTrigger
    on miTabla
    for update
    as
    begin
        declare @estado int = (select estado from deleted)
        if(update(campo1) and @estado = 19)
        begin
            raiserror('No se puede actualizar el campo1 porque tiene el estado 19', 10, 1)
    	rollback transaction
        end
    end
    go

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta Leon Abuin sábado, 25 de febrero de 2017 12:02
    sábado, 25 de febrero de 2017 0:51