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