PDA

Ver la Versión Completa : Trigger y multirow


sami76
28-11-2007, 15:45:49
Hol forer@s.

Tengo un problema. Tengo una tabla la cual la relleno a partir de una sentencia SQL. Esta sentencia puede insertar más de un registro en la tabla. En dicha tabla he creado un trigger FOR INSERT. El problema es que al ejecutar la sentencia SQL e insertarme más de un registro en la tabla, el trigger sólo se me ejecuta una vez. Querría que por cada registro, se me ejecutara. El trigger es este:

--------------------------------------------------------------------------

CREATE TRIGGER SPH_MOVIMIENTOS_INS ON dbo.SPH_MOVIMIENTOS_STOCK
FOR INSERT AS


DECLARE cr_MOV_INSERT Insensitive Cursor for
SELECT FECHA_MOV, TIPO_MOV, COD_ING_INT_MOV, CDAD_MOV, COD_ALM_MOV, NUM_LOTE_MOV, COD_USER_MOV FROM Inserted

OPEN cr_MOV_INSERT
FETCH cr_MOV_INSERT INTO @FECHA_MOV, @TIPO_MOV, @COD_ING_INT, @CDAD_MOV, @COD_ALM, @NUM_LOTE, @COD_USER

"Aquí hago los cálculos que necesito" ***********************


CLOSE cr_MOV_INSERT
DEALLOCATE cr_MOV_INSERT
-------------------------------------------------------------------------

No se si me falta algo para que me lo vaya haciendo para cada registro insertado.

De antemano, os doy las gracias.

Saludos.

sinalocarlos
29-11-2007, 00:08:40
Soy yo o faltaría el While sobre el cursor

CREATE TRIGGER SPH_MOVIMIENTOS_INS ON dbo.SPH_MOVIMIENTOS_STOCK
FOR INSERT AS


DECLARE cr_MOV_INSERT Insensitive Cursor for
SELECT FECHA_MOV, TIPO_MOV, COD_ING_INT_MOV, CDAD_MOV, COD_ALM_MOV, NUM_LOTE_MOV, COD_USER_MOV FROM Inserted

OPEN cr_MOV_INSERT
FETCH cr_MOV_INSERT INTO @FECHA_MOV, @TIPO_MOV, @COD_ING_INT, @CDAD_MOV, @COD_ALM, @NUM_LOTE, @COD_USER


While @@fetch_status = 0
begin
--cálculos
--cálculos
--cálculos

FETCH cr_MOV_INSERT INTO @FECHA_MOV, @TIPO_MOV, @COD_ING_INT, @CDAD_MOV, @COD_ALM, @NUM_LOTE, @COD_USER

end


CLOSE cr_MOV_INSERT
DEALLOCATE cr_MOV_INSERT




nos dices si fue eso

sami76
03-12-2007, 19:14:47
Gracias sinalocarlos. Ya sabía yo que faltaba algo. Claro, si no recorro los registros insertados, pues ya puedo esperar sentado.

Como tú has indicado, era cuestión de introducir la condición
While @@fetch_status = 0

y al final volver a leer el nuevo registro.

Muchas gracias otra vez.

Saludos.