SQL Server

Transacciones en SQL Server explicado fácil: BEGIN TRANSACTION, COMMIT y ROLLBACK

Publicado por J. Panduro hace 4 meses

Transacciones en SQL Server explicado fácil: BEGIN TRANSACTION, COMMIT y ROLLBACK

Cuando trabajas con sistemas reales en SQL Server, muchas veces necesitas ejecutar varias operaciones como una sola unidad segura.


Por ejemplo:

  1. Registrar una venta
  2. Descontar stock
  3. Generar pedido
  4. Registrar pago


Si algo falla, todo debe revertirse.


Aquí entran las transacciones (Transactions).


En este artículo aprenderás:

  1. Qué es una transacción
  2. Cómo usar BEGIN TRANSACTION
  3. Cómo funciona COMMIT
  4. Cómo usar ROLLBACK
  5. Casos reales empresariales
  6. Manejo seguro de datos


¿Qué es una transacción?


Una transacción es un conjunto de operaciones SQL que se ejecutan como una sola unidad.


Las transacciones permiten que estas operaciones se realicen de forma segura. Si todas las instrucciones se ejecutan correctamente, los cambios se guardan de manera permanente en la base de datos. Sin embargo, si ocurre algún error durante el proceso, SQL Server puede revertir todas las modificaciones realizadas, evitando que la información quede incompleta o inconsistente.


Tiene dos posibles resultados:

✅ Todo se guarda

❌ Nada se guarda



Ejemplo real


Imagina:

  1. Registrar venta
  2. Descontar stock


Si el stock falla:

  1. La venta NO debe guardarse.


Conceptos principales



Dataset completo (copiar y ejecutar)


-- =========================================
-- ELIMINAR TABLAS SI EXISTEN
-- =========================================
IF OBJECT_ID('Ventas', 'U') IS NOT NULL
DROP TABLE Ventas;

IF OBJECT_ID('Productos', 'U') IS NOT NULL
DROP TABLE Productos;

-- =========================================
-- CREAR TABLA PRODUCTOS
-- =========================================
CREATE TABLE Productos (
IdProducto INT IDENTITY(1,1) PRIMARY KEY,
Nombre VARCHAR(100) NOT NULL,
Stock INT NOT NULL,
Precio DECIMAL(10,2) NOT NULL
);

-- =========================================
-- CREAR TABLA VENTAS
-- =========================================
CREATE TABLE Ventas (
IdVenta INT IDENTITY(1,1) PRIMARY KEY,
IdProducto INT NOT NULL,
Cantidad INT NOT NULL,
FechaVenta DATETIME DEFAULT GETDATE()
);

-- =========================================
-- INSERTAR DATOS
-- =========================================
INSERT INTO Productos (Nombre, Stock, Precio)
VALUES
('Laptop', 10, 2500),
('Mouse', 50, 80),
('Teclado', 30, 150);



Primera transacción básica


BEGIN TRANSACTION;

UPDATE Productos
SET Stock = Stock - 1
WHERE IdProducto = 1;

COMMIT;



¿Qué pasó aquí?


BEGIN TRANSACTION

Inicia la operación segura.


UPDATE

Modifica stock.


COMMIT

Guarda definitivamente cambios.


Ejemplo con ROLLBACK


BEGIN TRANSACTION;

UPDATE Productos
SET Stock = Stock - 5
WHERE IdProducto = 1;

ROLLBACK;


Aunque se ejecuta el UPDATE:

  1. Los cambios se revierten.


Verificar resultado


El stock seguirá igual.


¿Cuándo usar ROLLBACK?


Cuando ocurre:

  1. Error
  2. Validación incorrecta
  3. Fallo lógico
  4. Problema de negocio


Caso real empresarial completo


Registrar venta + descontar stock.


BEGIN TRANSACTION;

INSERT INTO Ventas
(
IdProducto,
Cantidad
)
VALUES
(
1,
2
);

UPDATE Productos
SET Stock = Stock - 2
WHERE IdProducto = 1;

COMMIT;


¿Qué garantiza esto?


Que ambas operaciones:

  1. Se guarden juntas

o

  1. No se guarde ninguna


Transacción + TRY CATCH


Aquí ya entramos a nivel profesional


BEGIN TRY

BEGIN TRANSACTION;

INSERT INTO Ventas
(
IdProducto,
Cantidad
)
VALUES
(
1,
2
);

UPDATE Productos
SET Stock = Stock - 2
WHERE IdProducto = 1;

COMMIT;

END TRY

BEGIN CATCH

ROLLBACK;

PRINT 'Ocurrió un error';

END CATCH;


¿Qué hace TRY CATCH?


Si ocurre un error:

  1. Ejecuta ROLLBACK
  2. Revierte cambios


La estructura TRY...CATCH en SQL Server permite controlar errores de forma segura durante la ejecución de instrucciones T-SQL. Su funcionamiento es similar al manejo de excepciones presente en muchos lenguajes de programación, ya que permite detectar errores y ejecutar acciones específicas cuando estos ocurren.


El bloque TRY contiene las instrucciones que se intentarán ejecutar normalmente. Si todas las operaciones finalizan correctamente, el proceso continúa sin inconvenientes. Sin embargo, si se produce un error durante la ejecución, SQL Server interrumpe el bloque TRY y transfiere automáticamente el control al bloque CATCH.


Dentro del bloque CATCH es posible registrar información del error, mostrar mensajes personalizados, realizar auditorías o ejecutar acciones correctivas para evitar que la base de datos quede en un estado inconsistente. Una de las prácticas más comunes consiste en utilizar ROLLBACK para revertir todos los cambios realizados dentro de una transacción cuando ocurre un fallo.


Validación de stock real


Caso empresarial real.


BEGIN TRY

BEGIN TRANSACTION;

DECLARE @StockActual INT;

SELECT @StockActual = Stock
FROM Productos
WHERE IdProducto = 1;

IF @StockActual < 5
BEGIN
RAISERROR('Stock insuficiente', 16, 1);
END

UPDATE Productos
SET Stock = Stock - 5
WHERE IdProducto = 1;

COMMIT;

END TRY

BEGIN CATCH

ROLLBACK;

PRINT ERROR_MESSAGE();

END CATCH;


¿Qué es RAISERROR?


RAISERROR es una instrucción de SQL Server que permite generar mensajes de error personalizados desde el código T-SQL. Se utiliza para informar que una condición específica no se ha cumplido o que se ha producido una situación que impide continuar con la ejecución normal de un proceso.

A diferencia de los errores generados automáticamente por SQL Server, RAISERROR permite al desarrollador definir mensajes claros y descriptivos que facilitan la identificación de problemas dentro de procedimientos almacenados, funciones o scripts complejos. Esto resulta especialmente útil en aplicaciones empresariales donde es necesario validar reglas de negocio antes de realizar operaciones importantes sobre la base de datos.


Ejercicios tipo entrevista


Nivel intermedio

Insertar venta y descontar stock.


BEGIN TRANSACTION;

INSERT INTO Ventas
(
IdProducto,
Cantidad
)
VALUES
(
1,
2
);

UPDATE Productos
SET Stock = Stock - 2
WHERE IdProducto = 1;

COMMIT;


Nivel entrevista real

Validar stock antes de vender


BEGIN TRY

BEGIN TRANSACTION;

DECLARE @Stock INT;

SELECT @Stock = Stock
FROM Productos
WHERE IdProducto = 1;

IF @Stock < 3
BEGIN
RAISERROR('No hay suficiente stock', 16, 1);
END

UPDATE Productos
SET Stock = Stock - 3
WHERE IdProducto = 1;

COMMIT;

END TRY

BEGIN CATCH

ROLLBACK;

PRINT ERROR_MESSAGE();

END CATCH;



Conclusión


Dominar las transacciones en SQL Server es fundamental para desarrollar sistemas seguros, confiables y profesionales, ya que permiten controlar cómo se aplican los cambios en la base de datos de forma completa o reversible.


El uso de BEGIN TRANSACTION, COMMIT y ROLLBACK permite iniciar un proceso de cambios, confirmarlos cuando todo es correcto o revertirlos si ocurre algún error, asegurando así la integridad de los datos.


Este concepto es clave en sistemas donde la información es crítica, como bancos, ventas, sistemas ERP, e-commerce y aplicaciones empresariales en general.


En conclusión, las transacciones garantizan que los datos se mantengan consistentes y seguros, evitando errores y asegurando la confiabilidad del sistema.

Sobre el autor

J. Panduro es desarrollador de software y creador de HPanduDigital. Comparte contenido sobre Desarrollo Web, inteligencia artificial, y transformación digital, basado en experiencias reales y proyectos prácticos.

Buscar artículos

Escribe al menos 2 caracteres para buscar.