Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MS SQL Server
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-11-2007
sami76 sami76 is offline
No confirmado
 
Registrado: ene 2007
Posts: 19
Poder: 0
sami76 Va por buen camino
Question 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.
Responder Con Cita
  #2  
Antiguo 29-11-2007
sinalocarlos sinalocarlos is offline
Miembro
 
Registrado: sep 2006
Posts: 152
Poder: 18
sinalocarlos Va por buen camino
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

Última edición por sinalocarlos fecha: 29-11-2007 a las 00:12:15. Razón: me faltaron etiquetas
Responder Con Cita
  #3  
Antiguo 03-12-2007
sami76 sami76 is offline
No confirmado
 
Registrado: ene 2007
Posts: 19
Poder: 0
sami76 Va por buen camino
Thumbs up

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.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Un trigger que dispara un procedimiento que dispara un trigger... sitrico Firebird e Interbase 5 04-06-2007 22:05:13
Trigger inferno Firebird e Interbase 1 26-10-2005 21:25:43
consecutivo no trigger el_barto Conexión con bases de datos 6 11-07-2005 16:52:23
trigger jaime cotino Firebird e Interbase 3 10-06-2004 19:10:48
trigger acertij022 Firebird e Interbase 6 20-10-2003 19:20:31


La franja horaria es GMT +2. Ahora son las 18:27:18.


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
Copyright 1996-2007 Club Delphi