Ver Mensaje Individual
  #1 (permalink)  
Antiguo 11/01/2006, 18:34
gangster
 
Fecha de Ingreso: septiembre-2003
Mensajes: 39
Antigüedad: 21 años, 5 meses
Puntos: 0
Pregunta problema trigger / delete masivo

hola, tengo un problema entre un trigger (on deleted) y un procedimiento almacenado que hace un delete masivo y luego un insert masivo despues de un proceso de calculos...

al ejecutarlos desde el query analyzer funciona perfecto... pero al llamarlos desde VB no se ejecuta la parte que hace el borrado masivo... y descubrí q al quitar el trigger de la tabla si se ejecutaba...
mi pregunta es como puedo hacer para que convivan el trigger (para eliminacion) y el procedimiento almacenado q borra en forma masiva muchas filas de dicha tabla...???

existe la forma de identificar en el trigger que ese procedimiento almacenado fue el que eliminó las filas... y no alguna otra instruccion delete de algun otro lugar..

help me please

el trigger

Código:
CREATE TRIGGER LOG_ProRecDet_DELETE ON ProRecDet
FOR DELETE 
AS

IF @@rowcount>0 begin 
	DECLARE @cod numeric, @cant numeric, @idpro numeric, @usr nvarchar(50), @xusr nvarchar(50)
	DECLARE borrados CURSOR FOR SELECT idpro,cod,cant,usr FROM deleted
	OPEN borrados
	FETCH NEXT FROM borrados INTO @idpro,@cod,@cant,@usr
	WHILE @@FETCH_STATUS = 0
		BEGIN
		print @cod 
		print @idpro
		print @usr 

			if APP_NAME() like 'Visual Basic%' or APP_NAME() like 'Mas%'	
				set @xusr=@usr
			else	
				set @xusr='-'
	
			Insert Into LOGREC select 'DEL', 'ProRecDet',  @idpro, @cod,@cant, host_name(), getdate(),@xusr, APP_NAME()
	  	FETCH NEXT FROM borrados INTO @idpro,@cod,@cant,@usr
	END
	CLOSE borrados
	DEALLOCATE borrados
END
y el SP

Código:
CREATE PROCEDURE  SpActualizaRecetaGif01
(
@fecIni as smalldatetime,
@fecFin as smalldatetime
)

AS


PRINT 'ELIMINANDO VALORES ANTIGUOS RECETA'
DELETE  PRORECDET WHERE COD IN 
(SELECT CODGIF FROM v_pro_gif_04_Nuevo_Valor_gif_receta where 
(idpro = v_pro_gif_04_Nuevo_Valor_gif_receta.pro) and 
(mes between month(@fecIni) and month(@fecfin)) and 
(ano between year(@fecIni) and year(@fecfin)) ) --order by idpro,cod
print'fin de eliminacion'

IF @@ERROR <> 0 
BEGIN
   PRINT "Error"
   RETURN(99)
END
ELSE
BEGIN
   PRINT "OK"
   RETURN(0)
END
__________________

www.qZone.cl

Última edición por gangster; 12/01/2006 a las 06:04