Hola comunidad, estoy usando este modelo de procedimiento que en mi logica
que cuando ocurre un error debe de usar el ROLLBACK TRANSACTION para
desacerce toda la operacion pero por declarar equivocadamente (Declare
@dsFecha smallmoney, @dsImporte datetime) que al final me ayudo bastante y
comprobar que no era asi, que todos los datos lo eliminaba y lo modificaba
que no era como yo lo deseo.
espero su respuesta gracias
CREATE PROCEDURE [dbo].[DeleteDetalleSalida]
@IdDetalleSalida smallint,
@sFecha smalldatetime,
@IdSalida smallint,
@IdMaterial nchar(7),
@dsCandidad decimal(9,2)
AS
BEGIN TRAN
SET NOCOUNT ON
IF @@ERROR != 0 GOTO ERROR_HANDLER
DELETE FROM [dbo].[DetalleSalida]
WHERE IdDetalleSalida=@IdDetalleSalida AND IdSalida=@IdSalida AND
sFecha=@sFecha
IF @@ERROR != 0 GOTO ERROR_HANDLER
UPDATE [dbo].[Salida] SET sTotal = 0
WHERE IdSalida=@IdSalida AND sFecha=@sFecha
IF @@ERROR != 0 GOTO ERROR_HANDLER
SELECT
dsFecha,IdMaterial,dsImporte,dsCantidad,dsImporteTotal,dsDetalle,dsNumVale
INTO #Orden
FROM DetalleSalida
WHERE sFecha= @sFecha AND IdSalida=@IdSalida
IF @@ERROR != 0 GOTO ERROR_HANDLER
DELETE FROM DetalleSalida
WHERE sFecha= @sFecha AND IdSalida=@IdSalida
IF @@ERROR != 0 GOTO ERROR_HANDLER
decimal(9,2), @dsImporteTotal smallmoney,
Declare @dsFecha smallmoney, @dsImporte datetime, @dsCantidad decimal(9,2),
@dsImporteTotal smallmoney,
@dsDetalle nvarchar(100), @dsNumVale nvarchar(20)
IF @@ERROR != 0 GOTO ERROR_HANDLER
DECLARE
cursord CURSOR FOR
SELECT dsFecha,dsImporte,dsCantidad,dsImporteTotal,dsDetalle,dsNumVale FROM
#Orden
OPEN cursord
FETCH NEXT FROM cursord
INTO @dsFecha,@dsImporte,@dsCantidad,@dsImporteTotal,@dsDetalle,@dsNumVale
WHILE @@FETCH_STATUS = 0
BEGIN
IF @@ERROR != 0 GOTO ERROR_HANDLER
EXEC @IdDetalleSalida=[NuevoIdDetalleSalida] @IdSalida, @sFecha
IF @@ERROR != 0 GOTO ERROR_HANDLER
INSERT INTO [dbo].[DetalleSalida]
([IdDetalleSalida],[dsFecha],[IdSalida],[sFecha],[IdMaterial],[dsImporte],[dsCantidad],[dsImporteTotal],[dsDetalle],[dsNumVale])
VALUES
(@IdDetalleSalida,@dsFecha,@IdSalida,@sFecha,@IdMaterial,@dsImporteTotal,@dsCantidad,@dsImporteTotal,@dsDetalle,@dsNumVale)
IF @@ERROR != 0 GOTO ERROR_HANDLER
UPDATE [dbo].[Salida] SET sTotal = sTotal + @dsImporteTotal
WHERE IdSalida=@IdSalida AND sFecha=@sFecha
IF @@ERROR != 0 GOTO ERROR_HANDLER
FETCH NEXT FROM cursord
INTO @dsFecha,@dsImporte,@dsCantidad,@dsImporteTotal,@dsDetalle,@dsNumVale
END
CLOSE cursord
DEALLOCATE cursord
IF @@ERROR != 0 GOTO ERROR_HANDLER
COMMIT TRANSACTION
RETURN 0
ERROR_HANDLER:
BEGIN
ROLLBACK TRANSACTION
RETURN @@ERROR
END
Leer las respuestas