none
Error con Trigger After Insert RRS feed

  • Pregunta

  • Buenos días a todos, espero se encuentren bien.

    El día de hoy vengo con otro problema, me explico mejor. Estoy trabajando con mi sistema (con entrega de Facturas y Remisiones), el cuál al momento de yo generar una entrega automática Factura o Remisión, ésta no puedo editarla y se marca como "Concluida" (la Entrega se genera en un proceso llamado Ruta), es algo así:

    Genero la Factura/Remisión -> Si le doy salida automática se genera la Ruta y se ingresa a un almacén virtual -> Se marca como "Concluida"; esto quiere decir que la Ruta fue "Entregada" al cliente y no puedo agregar más Facturas/Remisiones a dicha Ruta.

    Pero si yo genero manualmente la salida puedo editar la Ruta y agregar más Facturas/Remisiones a dicha ruta.

    Se me había ocurrido hacer un Trigger para editar las Rutas generadas en automático, de cambiarles el estatus de "Concluida" a "Nueva" para que me dejase editarlas, lo generé algo así:

       Create trigger RUTASB
       on RUTAF
       for Insert
       as
       Update P set P.ESTATUS='Nueva'
       from RUTAF as P
       WHERE DESCRIPCION='Ruta Local. Salida Local.' AND ESTATUS='Concluida'


    Hasta aquí funcionó bien, si yo edito una dicha Ruta generada en automático, me deja agregar más Facturas.

    El problema está que si intento generar una nueva, me da error, mandando el mensaje "error en la transacción en la base de datos" esto, por el trigger generado.

    Se me ocurrió cambiar ésta línea 

    for Insert

    Por:

    after Insert

    Pero sigo con lo mismo, no se si con lo que explico me doy a entender. Lo que busco es que las Rutas con la siguiente condición:

    DESCRIPCION='Ruta Local. Salida Local.' AND ESTATUS='Concluida'

    Se actualice el Estatus a 'Nueva' sin afectar las que se intenten generar nuevas.

    No se si me de a entender y se pueda hacer algo así.

    De antemano muchas gracias por su tiempo. 

    EDITO:

    La idea es que actualice el Estatus en solo aquellas que la Descripción sea igual a "Ruta Local. Salida Local." y el Estatus sea igual a "Concluida", las demás no.

    No se si se pueda realizar esto.


    jueves, 8 de abril de 2021 16:53

Respuestas

  • Acabo de dar con la solución, lo solucioné de la siguiente forma, por si a alguien le sirve:

    Create trigger RUTASBIMBO2
       on RUTAF
       for Insert
       as
       Update P set P.ESTATUS='Nueva'
       from RUTAF as P inner join
       INSERTED as D on D.DESCRIPCION=P.DESCRIPCION

    Así pude resolver mi problema, sin tanta complicación como me estaba liando anteriormente jajaja.

    De igual forma muchas gracias.

    • Marcado como respuesta Alejandro 0991 jueves, 8 de abril de 2021 19:24
    jueves, 8 de abril de 2021 19:24
  • Hola Alejandro 0991:

    For insert y After insert, son exactamente lo mismo.

    No obstante, es un poco anómalo, y no debería de haber una update, que relaciona dos conjuntos por una columna que se llama descripción.

    ¿Qué pasa si hay 2 registros con la misma descripción? ¿Y si hay 2000?

    No se la definición de tú tabla, pero Insert.ColPrimaryKey = RutaF.ColPrimaryKey

    Create trigger dbo.RUTASBIMBO2
       on dbo.RUTAF
       After Insert
       as
    		Update P set P.ESTATUS='Nueva'
    		from RUTAF as P inner join
    			 INSERTED as D on D.colPrimaryKey = P.colPrimaryKey
    		Where D.DESCRIPCION='Ruta Local. Salida Local.' 
    			AND D.ESTATUS='Concluida';

    Según lo que indicas, no todos los registros que se insertan tienen que cambiar de estado, solo los que sean descripción=.... y estatus=.....

    Trigger After Insert

    https://javifer2.wordpress.com/2020/04/12/trigger-que-es-como-se-hace-y-como-funciona-after-for-insert/

    • Marcado como respuesta Alejandro 0991 jueves, 8 de abril de 2021 20:17
    jueves, 8 de abril de 2021 19:52

Todas las respuestas

  • Acabo de dar con la solución, lo solucioné de la siguiente forma, por si a alguien le sirve:

    Create trigger RUTASBIMBO2
       on RUTAF
       for Insert
       as
       Update P set P.ESTATUS='Nueva'
       from RUTAF as P inner join
       INSERTED as D on D.DESCRIPCION=P.DESCRIPCION

    Así pude resolver mi problema, sin tanta complicación como me estaba liando anteriormente jajaja.

    De igual forma muchas gracias.

    • Marcado como respuesta Alejandro 0991 jueves, 8 de abril de 2021 19:24
    jueves, 8 de abril de 2021 19:24
  • Hola Alejandro 0991:

    For insert y After insert, son exactamente lo mismo.

    No obstante, es un poco anómalo, y no debería de haber una update, que relaciona dos conjuntos por una columna que se llama descripción.

    ¿Qué pasa si hay 2 registros con la misma descripción? ¿Y si hay 2000?

    No se la definición de tú tabla, pero Insert.ColPrimaryKey = RutaF.ColPrimaryKey

    Create trigger dbo.RUTASBIMBO2
       on dbo.RUTAF
       After Insert
       as
    		Update P set P.ESTATUS='Nueva'
    		from RUTAF as P inner join
    			 INSERTED as D on D.colPrimaryKey = P.colPrimaryKey
    		Where D.DESCRIPCION='Ruta Local. Salida Local.' 
    			AND D.ESTATUS='Concluida';

    Según lo que indicas, no todos los registros que se insertan tienen que cambiar de estado, solo los que sean descripción=.... y estatus=.....

    Trigger After Insert

    https://javifer2.wordpress.com/2020/04/12/trigger-que-es-como-se-hace-y-como-funciona-after-for-insert/

    • Marcado como respuesta Alejandro 0991 jueves, 8 de abril de 2021 20:17
    jueves, 8 de abril de 2021 19:52
  • Que hay Javi Fernández F

    Esta otra forma también me sirvió, muchísimas gracias como siempre amigo :D

    jueves, 8 de abril de 2021 20:18