Tenemos dos tipos de transacciones en SQL Server las implícitas y las explicitas.
Implícitas: Son aquellas que no debemos indicarle al SQL que hacemos una transacción pero el lo genera, por ejemplo como el siguiente caso.
DELETE FROM TABLA1
WHERE NU_CODIGO= 1
Explicitas: Las transacciones explicitas son aquellas que nosotros indicamos con la sentencia Begin Transaction / Commit o Rollback Transaction
Paso 1: Crear tabla
CREATE TABLE TABLA1
(
NU_CODIGO INT PRIMARY KEY,
CH_NOMBRE VARCHAR(50),
CH_APELLIDOS VARCHAR(100)
)
Paso 2: Crear procedimiento
CREATE PROC GUARDAR_TABLA1(
@NU_CODIGO integer ,
@CH_NOMBRE varchar(50) ,
@CH_APELLIDOS varchar(50) ,
-- variable de salida , para conocer el mensaje de la transaccion
@MESSAGE varchar(500) output
)
AS
-- Asignamos un nombre a la transaccion
BEGIN TRAN TRAN_GUARDAR_TABLA1
BEGIN TRY
BEGIN
INSERT INTO TABLA1(NU_CODIGO ,
CH_NOMBRE ,
CH_APELLIDOS
)
VALUES(@NU_CODIGO ,
@CH_NOMBRE ,
@CH_APELLIDOS
)
set @MESSAGE= 'Registro guardado'
END
END TRY
BEGIN CATCH
-- si se produciera algun error desacera los cambios
ROLLBACK TRAN TRAN_GUARDAR_TABLA1
-- asignara a la variable el mensaje de error
SET @MESSAGE = ERROR_MESSAGE()
RETURN
END CATCH
COMMIT TRAN TRAN_GUARDAR_TABLA1
Paso 3: Primera ejecución
DECLARE @MESSAGE VARCHAR(500)
EXEC GUARDAR_TABLA1 1, 'XXX', 'YYYY', @MESSAGE OUTPUT
SELECT @MESSAGE
Mensaje devuelto: Registro guardado
Paso 4: Segunda ejecución
DECLARE @MESSAGE VARCHAR(500)
EXEC GUARDAR_TABLA1 1, 'XXX', 'YYYY', @MESSAGE OUTPUT
SELECT @MESSAGE
Mensaje devuelto: Infracción de la restricción PRIMARY KEY 'PK__TABLA1__8F57AAEA08EA5793'. No se puede insertar una clave duplicada en el objeto 'dbo.TABLA1'
Notas:
BEGIN TRANSACTION: Marca el punto de inicio de una transacción local explícita.
ROLLBACK : Revierte una transacción explícita o implícita hasta el inicio de la transacción o hasta un punto de retorno dentro de la transacción.Puede usar ROLLBACK TRANSACTION para borrar todas las modificaciones de datos realizadas desde el inicio de la transacción o hasta un punto de retorno.
COMMIT: Marca el final de una transacción correcta, implícita o explícita.
TRY / CATCH: Implementa el control de errores para Transact-SQL que es similar al manejo de excepciones en Microsoft Visual Basic
No hay comentarios:
Publicar un comentario