Blog

Perfeccionando Triggers y Set Nocount On

Posted by:

Recientemente he aprendido un nuevo comando, al que quizás no demos importancia, pero que es vital si trabajamos con Triggers.

Actualizar multiples registros desde un Trigger

Os pongo en situación

Un cliente me ha solicitado hacer un cambio en una tabla cuando realiza una modificación en otra tabla.

Se podría hacer manualmente que un update a pelo, pero como siempre digo, no es muy elegante.

La forma elegante es utilizar un Trigger que nos gestione estas modificaciones y que el cliente/usuario no se entere de nada ni tengamos que confiar en su memoria.

¿Pero que problemas nos podemos encontrar cuando queremos hacer un update desde un trigger?

Pues que nos diga que el comando update “afecta a más de un registro” y nos bloquee nuestra orden.

en mi caso,

Al modificar un precio en una tabla, tenía que ir a la tabla de artículos y obtener un valor para utilizarlo en la actualización de un cálculo de una tercera tabla (no entraré en detalles)

Os pongo un ejemplo de un código parecido

  1. CREATE TRIGGER [dbo].[trg_Periodo]
  2. ON [dbo].[Periodo]
  3. AFTER INSERT
  4. AS
  5. BEGIN
  6. — SET NOCOUNT ON added to prevent extra result sets from
  7. — interfering with SELECT statements.
  8. SET NOCOUNT ON;
  9. — Insert statements for trigger here
  10. UPDATE Alumno SET
  11. STATUS = 0
  12. WHERE STATUS = 1
  13. END

ejemplo de : forosdelweb

El secreto para poder solucionar este problemilla ha sido utilizar el comando “SET NOCOUNT ON;”

Qué hacer SET NOCOUNT ON:

haciendo una cita del foro aprendiendoSqlServer

“SQL nos devuelve por separado el número de filas afectadas por la instrucción principal (la llamante) y la(s) que se encuentra(n) en el trigger.”

0


About the Author:

Add a Comment

UA-30641277-1