Migración de A3ERP
03/01/2015Ampliar tamaño de discos duros en virtualbox windows
18/03/2015Recientemente 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
-
CREATE TRIGGER [dbo].[trg_Periodo]
-
ON [dbo].[Periodo]
-
AFTER INSERT
-
AS
-
BEGIN
-
— SET NOCOUNT ON added to prevent extra result sets from
-
— interfering with SELECT statements.
-
SET NOCOUNT ON;
-
— Insert statements for trigger here
-
UPDATE Alumno SET
-
STATUS = 0
-
WHERE STATUS = 1
-
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.”