SQL

Manejo de transacciones para insertar, modificar o eliminar en SQL Server

Estrada Web Group
Estrada Web Group
Manejo de transacciones para insertar, modificar o eliminar en SQL Server

Resumen: en este tutorial, aprenderás sobre las transacciones de SQL Server y cómo usar T-SQL para ejecutar transacciones.

Introducción a las transacciónes de SQL Server

Una transacción es una unidad de trabajo que normalmente contiene varias instrucciones T-SQL.

Si una transacción es exitosa, los cambios se confirman en la base de datos. Sin embargo, si una transacción tiene un error, los cambios deben revertirse.

Al ejecutar una sola declaración como INSERT, UPDATE y DELETE, SQL Server usa la transacción de confirmación automática. En este caso, cada declaración es una transacción.

Para iniciar una transacción explícitamente, primero usa la instrucción BEGIN TRANSACTION o BEGIN TRAN:

BEGIN TRANSACTION;

Luego, ejecute una o más declaraciones, incluidas INSERT, UPDATE y DELETE.

Finalmente, confirme la transacción usando la instrucción COMMIT:

COMMIT;

O desaz la transacción usando la instrucción ROLLBACK:

ROLLBACK;

Aquí está la secuencia de declaraciones para iniciar una transacción explícitamente y confirmarla:

-- start a transaction
BEGIN TRANSACTION;

-- other statements

-- commit the transaction
COMMIT;

Ejemplo de transacciónes en SQL Server

Crearemos dos tablas: invoices e invoice_items para la demostración:

CREATE TABLE invoices (
  id int IDENTITY PRIMARY KEY,
  customer_id int NOT NULL,
  total decimal(10, 2) NOT NULL DEFAULT 0 CHECK (total >= 0)
);

CREATE TABLE invoice_items (
  id int,
  invoice_id int NOT NULL,
  item_name varchar(100) NOT NULL,
  amount decimal(10, 2) NOT NULL CHECK (amount >= 0),
  tax decimal(4, 2) NOT NULL CHECK (tax >= 0),
  PRIMARY KEY (id, invoice_id),
  FOREIGN KEY (invoice_id) REFERENCES invoices (id)
    ON UPDATE CASCADE
    ON DELETE CASCADE
);

La tabla de invoices almacena el encabezado de la factura, mientras que la tabla de invoice_items almacena los elementos que incluye la factura. El campo total en la tabla de invoices se calcula a partir de los elementos de invoice_tems.

El siguiente ejemplo usa las instrucciones BEGIN TRANSACTION y COMMIT para crear una transacción

BEGIN TRANSACTION;

INSERT INTO invoices (customer_id, total)
VALUES (100, 0);

INSERT INTO invoice_items (id, invoice_id, item_name, amount, tax)
VALUES (10, 1, 'Keyboard', 70, 0.08),
       (20, 1, 'Mouse', 50, 0.08);

UPDATE invoices
SET total = (SELECT
  SUM(amount * (1 + tax))
FROM invoice_items
WHERE invoice_id = 1);

COMMIT;


En este ejemplo

Primero, se inicia una transacción explícitamente usando la instrucción BEGIN TRANSACTION:

BEGIN TRANSACTION;

A continuación, inserta una fila en la tabla de invoices y devuelve el id de la factura:

DECLARE @invoice TABLE (
  id int
);

DECLARE @invoice_id int;

INSERT INTO invoices (customer_id, total)
OUTPUT INSERTED.id INTO @invoice
VALUES (100, 0);

SELECT
  @invoice_id = id
FROM @invoice;

Luego, inserta dos filas en la tabla invoice_items:

INSERT INTO invoice_items (id, invoice_id, item_name, amount, tax)
VALUES (10, @invoice_id, 'Keyboard', 70, 0.08),
       (20, @invoice_id, 'Mouse', 50, 0.08);

Después de eso, calcula el total usando la tabla de invoice_items y actualízalo en la tabla de invoices:

UPDATE invoices
SET total = (
    SELECT SUM(amount * (1 + tax))
    FROM invoice_items
    WHERE invoice_id = @invoice_id
);

Finalmente, confirma la transacción usando la instrucción COMMIT:

COMMIT;

Resumen

  • Utiliza la instrucción BEGIN TRANSACTION para iniciar una transacción de forma explícita.
  • Utiliza la declaración COMMIT para confirmar la transacción y la declaración ROLLBACK para revertir la transacción.

 

Compartir artículo:

Más artículos geniales

¿Cómo obtener el valor máximo en SQL Server con la función MAX()?

¿Cómo obtener el valor máximo en SQL Server con la función MAX()?

En este tutorial, aprenderás a usar la función MAX() de SQL Server para encontrar el valor máximo en un grupo de resultados.

Ver artículo completo
Cómo eliminar índices con DROP INDEX en SQL Server

Cómo eliminar índices con DROP INDEX en SQL Server

Resumen: en este tutorial, aprenderás a usar la instrucción DROP INDEX de SQL Server para eliminar índices existentes.

Ver artículo completo
Cómo actualizar una tabla desde otra con MERGE de SQL Server

Cómo actualizar una tabla desde otra con MERGE de SQL Server

Resumen: en este tutorial, aprenderás a usar la sentencia MERGE de SQL Server para actualizar los datos en una tabla con los valores de otra tabla, puedes hacer insert, update y delete con esta sentencia.

Ver artículo completo

Manténgase actualizado

Obtenga excelente contenido en su bandeja de entrada todas las semanas.
Solo contenido excelente, no compartimos su correo electrónico con terceros.
Subir al inicio de la pantalla