SQL - El trigueer sirve para:

 
Vista:

El trigueer sirve para:

Publicado por Paul R: (7 intervenciones) el 12/07/2002 04:56:18
El trigger sirve para disparar algun proceso cuando se inserta, modifica o elimina un registro . Hasta ahi estamos todos de acuerdo. Pero. Quiero saber si el trigeer se ejecuta para cada unco de los registros cuando se elimina sin ninguna condicion osea toda la tabla. Como por ejemplo:

Tabla: Producto
Llave Primaria: CodEmpresa, CodProducto
Otros Campos: DesProducto, FechaCompra, ..., etc.

Si hago un trigeer para ejecutarlo cuando elimino solo un registro de la tabla, osea:
DELETE FROM Producto
WHERE CodEmpresa = @CodEmpresa and CodProducto = @CodProducto,

Mi pregunta es: ¿se puede ejecutar el trigeer cuando elimino todos los productos de una empresa, osea de la siguiente manera?
DELETE FROM Producto
WHERE CodEmpresa = @CodEmpresa
¿Si es así, como se hace?

Saludos Paul
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:El trigueer sirve para:

Publicado por Vladimir (8 intervenciones) el 12/07/2002 16:02:29
Los trigger solo actual sobre la primera fila afectada.
para el caso de update, delete ó insert masivos se debe agregar rutinas de control para que modifiquen todas las filas afectadas.
para el caso de tu ejemplo, la solucion es la siguiente.

CREATE TRIGGER DEL_Producto ON Producto
FOR Delete
AS
DECLARE @xCodEmp INT
DECLARE @xFin INT

SET @xFin = 0

IF @@ROWCOUNT = 1
BEGIN
-- Aqui pones el codigo normal para cuando se elimina una linea
END
ELSE
BEGIN
WHILE @xFin = 0
BEGIN
SELECT Top 1 @xCodEmp = CodEmpresa
FROM INSERTED
WHERE CodEmpresa > @xCodEmp ORDER BY CodEmpresa

IF @@ROWCOUNT > 0
-- Aqui pones el codigo normal para cuando se elimina una linea
-- Utilizando como criterio @xCodEmpresa
ELSE
SET @xFin = 1
END
END

GO

Espero te sirva.

Atte. Vladimir Sepulveda O.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar