Si alguna de las operaciones de una transacción falla hay que deshacer la transacción en su totalidad para volver al
Si todas las operaciones de una transacción se completan con
Otra sentencia muy útil es GOTO, el cual nos permite ejecutar un camino alternativo de existir un error o una condición no cumplida, en SQL Server 2005 existe una nueva funcion de TRY y CATCH (el cual trataremos en otro Post).
Bueno aqui les muestro un ejemplo de como utilizarla en SQL Server (en mi caso SQL Server 2000).
ALTER PROCEDURE [DBO].[SP_Biotoscana_PreAviso]
@ACCION INT = 0,
@ERRORID INT OUTPUT,
@MSGReturn INT OUTPUT,
---------------------------------------------------------
@IDLINEA CHAR(5) = '1',
@IDPROD CHAR(30) ='',
@DESTINO CHAR(10) = '',
@LOTE CHAR(25) = '',
@FECVENC SMALLDATETIME = NULL,
@NUMOC CHAR(10) = '',
@NUMIMP CHAR(10) = '',
@PAIS CHAR(3) = '',
@CANTIDAD FLOAT = 0,
@UNIDAD CHAR(10) = '',
@PRECUNIT FLOAT = 0,
@MONEDA CHAR(4) = '',
---------------------------------------------------------
@NUMREF CHAR(15) = '',
@TIPOCOMPRA VARCHAR(15) = '',
@RUTPROV VARCHAR(100) = ''
AS
BEGIN
DECLARE @CORR CHAR(10)
SET @CORR = ''
IF @ACCION = 1
BEGIN
BEGIN TRAN
SET @CORR = (SELECT Lastbatnbr7+1 from SETUPWEB)
SET @MSGReturn = CAST((SELECT Lastbatnbr7+1 from SETUPWEB) AS INT)
update SETUPWEB set Lastbatnbr7= @CORR
INSERT INTO PRE_WEBHEADER (
CodLab,Corr, Crtd_DateTime, Crtd_Prog, Crtd_User,
Lupd_DateTime,Lupd_Prog,Lupd_User,NoteId,
RefLab,Status,TranType,VendId
) VALUES (
'49', @CORR,GETDATE(),'INTZ', 'NFS',
GETDATE(),'INTZ', 'NFS', 0,
@NUMREF, 'H',@TIPOCOMPRA,@RUTPROV
)
INSERT INTO PRE_WEBLINE
(
Corr,Crtd_DateTime,Crtd_Prog, Crtd_User,
CuryId,ExpDate,InvtId, LineRef,
LotSerNbr, Lupd_DateTime, Lupd_Prog,Lupd_User,
OrdNbr,OpenLine,Pais,QtyOrig,RefNbr,SiteId,
ShipperId,Status_Muestreo,TranDate,Unid,UnitPrice, QtyRcvd
)
VALUES
(
@CORR, GETDATE(), 'INTZ', 'NFS',
@MONEDA,@FECVENC,@IDPROD,@IDLINEA,
@LOTE,GETDATE(), 'INTZ', 'NFS',
@NUMOC, 'A', @PAIS,@CANTIDAD,@NUMREF, @DESTINO,
@NUMIMP,0, GETDATE(), @UNIDAD,@PRECUNIT, 0
)
SELECT @ERRORID = @@ERROR
IF (@ERRORID <> 0) GOTO PROBLEM
COMMIT TRAN
PROBLEM:
IF (@ERRORID <> 0) BEGIN
ROLLBACK TRAN
END
END
END
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
Espero que sea de ayuda. Saludos.
No hay comentarios:
Publicar un comentario