Una transacción en SQL Server tiene las siguientes propiedades, conocidas como ACID:
Para manejar transacciones en SQL Server, utilizamos los siguientes comandos:
Para ilustrar cómo funcionan las transacciones, crearemos una tabla simple y realizaremos algunas operaciones sobre ella.
-- Crear una tabla de ejemplo
CREATE TABLE Productos (
ProductoID INT PRIMARY KEY,
Nombre VARCHAR(50),
Precio DECIMAL(10, 2)
);
Iniciamos una transacción utilizando BEGIN TRANSACTION
.
BEGIN TRANSACTION;
Dentro de la transacción, realizamos varias operaciones de manipulación de datos (DML).
-- Insertar registros
INSERT INTO Productos (ProductoID, Nombre, Precio) VALUES (1, 'Producto A', 10.00);
INSERT INTO Productos (ProductoID, Nombre, Precio) VALUES (2, 'Producto B', 20.00);
-- Actualizar un registro
UPDATE Productos SET Precio = 15.00 WHERE ProductoID = 1;
-- Eliminar un registro
DELETE FROM Productos WHERE ProductoID = 2;
Después de realizar las operaciones, podemos validar que todo está correcto y luego confirmar la transacción.
-- Confirmar la transacción
COMMIT TRANSACTION;
Es importante manejar errores para asegurar que, en caso de problemas, la transacción pueda ser revertida.
BEGIN TRY
BEGIN TRANSACTION;
-- Operaciones DML
INSERT INTO Productos (ProductoID, Nombre, Precio) VALUES (3, 'Producto C', 30.00);
UPDATE Productos SET Precio = 25.00 WHERE ProductoID = 3;
-- Confirmar la transacción
COMMIT TRANSACTION;
END TRY
BEGIN CATCH
-- Si ocurre un error, deshacer la transacción
ROLLBACK TRANSACTION;
-- Opcional: Manejar el error, por ejemplo, mostrar un mensaje
DECLARE @ErrorMessage NVARCHAR(4000);
SET @ErrorMessage = ERROR_MESSAGE();
PRINT 'Error en la transacción: ' + @ErrorMessage;
END CATCH;
1. BEGIN TRANSACTION: Inicia la transacción.
2. BEGIN TRY...END TRY: Intenta ejecutar las operaciones dentro del bloque TRY.
3. BEGIN CATCH...END CATCH: Si ocurre un error, ejecuta el bloque CATCH.
4. COMMIT TRANSACTION: Si todas las operaciones en el bloque TRY son exitosas, se confirma la transacción.
5. ROLLBACK TRANSACTION: Si ocurre un error en el bloque TRY, se deshacen todas las operaciones realizadas desde el inicio de la transacción.
6. ERROR_MESSAGE(): Función que devuelve el mensaje de error del bloque CATCH.
Las transacciones son una herramienta poderosa en SQL Server para garantizar la integridad y consistencia de los datos. Al agrupar múltiples operaciones en una transacción, podemos asegurar que todas se completen correctamente o ninguna de ellas se aplique, lo que es fundamental para mantener la coherencia en bases de datos críticas.
Jorge García
Fullstack developer