Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MS SQL Server (https://www.clubdelphi.com/foros/forumdisplay.php?f=23)
-   -   Trigger y multirow (https://www.clubdelphi.com/foros/showthread.php?t=50802)

sami76 28-11-2007 15:45:49

Trigger y multirow
 
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

Código SQL [-]
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.


La franja horaria es GMT +2. Ahora son las 12:15:32.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi