Articles

Desencadenador de SQL Server Después de la actualización para un Valor específico

De: Dallas Snider / Actualizado: 2015-09-10 / Comentarios (6) | Relacionado: Más > Desencadenadores

Problema

Necesito crear un desencadenador de SQL Server que se ejecutará cuando un valor de columna se actualice a un valor específico. ¿Cómo puedo hacer esto?

Solución

En este consejo, le mostramos cómo escribir sentencias T-SQL que crearán un desencadenador SQLServer que se ejecutará después de actualizar un valor de columna a un valor específico.

En la imagen de abajo vemos donde creamos nuestra tabla de ejemplo llamada tblTriggerTest con una columna de clave primaria llamada pkID, una columna de fecha llamada OrderApprovalDateTime y una columna varchar llamada OrderStatus. Rellenamos la tabla con tres registros de prueba con el valor OrderApprovalDateTime establecido en NULL y el valor OrderStatus en «Pendiente».

Crear la tabla e insertar datos de ejemplo

En este ejemplo, queremos que nuestro disparador rellene el OrderApprovalDateTime con la fecha actual proporcionada por la función getdate() después de que el estado del pedido se actualice a «Aprobado». El T-SQL para crear este desencadenador se muestra a continuación. Es muy importante incluir la UNIÓN INTERNA en la tabla INSERTADA para que solo se vean afectadas las filas actualizadas. Usar la cláusula WHERE OrderStatus = ‘Approved’ por sí misma para limitar las filas actualizadas dará como resultado que todas las filas con un valor OrderStatus de Approved se actualicen al mismo tiempo.

Cree correctamente el disparador

Para probar el disparador, ejecutaremos una instrucción de actualización de T-SQL para establecer el valor OrderStatus en «Aprobado» para la primera fila de la tabla (pkID = 1). Después del comando T-SQL UPDATE, ejecutamos una consulta T-SQL SELECT para asegurarnos de que el desencadenador se ejecutó correctamente. Los resultados de las instrucciones UPDATE y SELECT se muestran a continuación.

Pruebe con éxito el disparador

Observe anteriormente que solo la primera fila tenía su OrderApprovalDateTime establecido en la fecha actual, que es nuestro comportamiento deseado. Sin embargo, necesitamos ejecutar una segunda prueba para asegurarnos de que se ha actualizado el número correcto de filas. En nuestra segunda prueba, ejecutaremos una instrucción T-SQL UPDATE para establecer el valor OrderStatus en «Approved» para la segunda fila de la tabla (pkID = 2). Después de seleccionar todos los registros de la tabla, observe cómo el OrderApprovalDateTime de la segunda fila no es igual al OrderApprovalDateTime de la primera fila. De nuevo, este es nuestro comportamiento deseado y todo parece estar bien.

Vuelva a probar el disparador

El código completo de este consejo se encuentra en el cuadro de abajo.

use MSSQLTipsgocreate table tblTriggerTest( pkID integer Identity(1,1) primary key, OrderApprovalDateTime datetime, OrderStatus varchar(20))insert into tblTriggerTest values (NULL, 'Pending')insert into tblTriggerTest values (NULL, 'Pending')insert into tblTriggerTest values (NULL, 'Pending')select * from tblTriggerTestgocreate trigger trTriggerTest on tblTriggerTestafter updateasbegin set nocount on; update tblTriggerTest set OrderApprovalDateTime=getdate() from tblTriggerTest t inner join inserted i on t.pkID=i.pkID and i.OrderStatus='Approved'endgoupdate tblTriggerTest set OrderStatus='Approved' where pkID=1goselect * from tblTriggerTestgoupdate tblTriggerTest set OrderStatus='Approved' where pkID=2goselect * from tblTriggerTestgo
Pasos siguientes

Tómese unos minutos para explorar lo que sucede cuando cambia la UNIÓN INTERNA o agrega más columnas a la tabla y al disparador.

Además, echa un vistazo a más consejos sobre los activadores en SQL Server en MSSQLTips.com.

  • Forzar el orden de activación del disparador en SQL Server
  • Evitar la actualización o eliminación accidental de comandos de todas las filas de una tabla de SQL Server
  • Auditar cuando los disparadores están Deshabilitados o habilitados para SQL Server

Última actualización: 2015-09-10

obtener scripts

botón de siguiente consejo

Sobre el autor
MSSQLTips autor Dallas Snider Dr. Dallas Snider es Profesor Asistente en el Departamento de Ciencias de la Computación de la Universidad de West Florida y tiene más de 18 años de experiencia en SQL.Ver todos mis consejos
Recursos relacionados

  • Más Consejos para Desarrolladores de bases de datos…