none
TIGGER CAMBIAR DATOS ULTIMO REGISTRO INSERT RRS feed

  • Pregunta

  • Estimados soy nueva en estos de los desencadeandores y deseo saber como cambiar un dato del ultimo registro que desencadena el tigger , 

    al colocar esto me cambia todos los registros de la tabla. Muchas gracias

    ALTER TRIGGER [dbo].[AELECTRONICA]

        ON [dbo].[DOCU_DB] FOR INSERT

        AS

        UPDATE  DOCU_DB SET ESELECTR=1

    miércoles, 10 de mayo de 2017 18:16

Respuestas

  • me arroja error

    Mens 102, Nivel 15, Estado 1, Procedimiento AELECTRONICA2, Línea 11
    Sintaxis incorrecta cerca de '('.
    Mens 137, Nivel 15, Estado 2, Procedimiento AELECTRONICA2, Línea 13
    Debe declarar la variable escalar "@IdLast".

    No has respondido a la pregunta.

    ¿Deseas actualizar el valor de una columna de la última fila de un bloque de filas insertadas? o ¿deseas actualizar el valor de una columna de todas las filas insertadas (una o varias)?

    De ser el primer caso lo que propongo te será de utilidad, el contexto de la ejecución del trigger es el de la transacción así que no tendrás problemas.

    De ser el segundo caso debes actualizar el valor de todas las filas que coincidan con las filas insertadas (pseudo-tabla inserted) o mejor aún podrías implementar un trigger INSTEAD OF

    Respecto a los errores que obtienes, ¿podrías adjuntar el código t-sql que has escrito?


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    miércoles, 10 de mayo de 2017 22:17

Todas las respuestas

  • ¿Qué estas entendiendo por el último registro que desencadena el trigger?

    Un trigger se desencadena ante un evento con independencia de que el mismo involucre una o varias filas, por tanto, si haces una inserción de varias filas y sólo deseas alterar la última fila insertada debes ocupar el valor de una columna que distinga el orden de inserción, por ejemplo una columna Id que se genere automáticamente (IDENTITY):

    ALTER TRIGGER [dbo].[AELECTRONICA]
        ON [dbo].[DOCU_DB] FOR INSERT
    AS
    BEGIN
        DECLARE @IdLast int = (SELECT MAX(id) FROM inserted)
        
        UPDATE DOCU_DB SET ESELECTR = 1 WHERE id = @IdLast;
    END
    GO


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    miércoles, 10 de mayo de 2017 18:33
  • Mil gracias por tu respuesta, yo creo que podría funcionar super bien lo que me indicas Williams, pero consulta como son varias personas que están ingresando información a la vez no sucederá que se traspapele y tome otro ultimo registro ? Perdona la ignorancia

    miércoles, 10 de mayo de 2017 18:48
  • me arroja error

    Mens 102, Nivel 15, Estado 1, Procedimiento AELECTRONICA2, Línea 11
    Sintaxis incorrecta cerca de '('.
    Mens 137, Nivel 15, Estado 2, Procedimiento AELECTRONICA2, Línea 13
    Debe declarar la variable escalar "@IdLast".

    miércoles, 10 de mayo de 2017 19:04
  • Saludos,

    Tu tabla debe estar normalizada y de este modo deberías de seleccionar el ID que esta siendo insertado, así se podrá identificar el ID que esta siendo insertado/actualizado cuando tu trigger se dispara.

    Prueba así:

    CREATE TRIGGER dbo.TuTabla_Trigger
    ON dbo.TuTabla
    AFTER INSERT, UPDATE
    AS
    BEGIN
    
    UPDATE x
    SET 
    	x.Fecha = GETDATE()
    FROM 
    	TuTabla x
    JOIN 
    	inserted i ON x.ID IN (SELECT DISTINCT ID FROM Inserted)
    
    END
    
    GO
    Adecúalo de acuerdo a tu escenario.


    Ayacucho - Perú
    Recuerda si mi solución atiende tu consulta por favor márcala como útil y como respuesta.

    http://litigiouslobo.blogspot.com/
    El Blog de Steve Morrison

    miércoles, 10 de mayo de 2017 21:08
  • me arroja error

    Mens 102, Nivel 15, Estado 1, Procedimiento AELECTRONICA2, Línea 11
    Sintaxis incorrecta cerca de '('.
    Mens 137, Nivel 15, Estado 2, Procedimiento AELECTRONICA2, Línea 13
    Debe declarar la variable escalar "@IdLast".

    No has respondido a la pregunta.

    ¿Deseas actualizar el valor de una columna de la última fila de un bloque de filas insertadas? o ¿deseas actualizar el valor de una columna de todas las filas insertadas (una o varias)?

    De ser el primer caso lo que propongo te será de utilidad, el contexto de la ejecución del trigger es el de la transacción así que no tendrás problemas.

    De ser el segundo caso debes actualizar el valor de todas las filas que coincidan con las filas insertadas (pseudo-tabla inserted) o mejor aún podrías implementar un trigger INSTEAD OF

    Respecto a los errores que obtienes, ¿podrías adjuntar el código t-sql que has escrito?


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    miércoles, 10 de mayo de 2017 22:17