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:
y el SPCREATE 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
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