SQL

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

Estrada Web Group
jiestrada
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.

 

Artículos de la serie:

Compartir artículo:

Más artículos geniales

¿Cómo usar el Having en SQL Server con ejemplos?

¿Cómo usar el Having en SQL Server con ejemplos?

Resumen: en este tutorial, aprenderás a usar la cláusula HAVING de SQL Server para filtrar los grupos según las condiciones especificadas.

Ver artículo completo
¿Cómo insertar varios registros en un solo INSERT en SQL?

¿Cómo insertar varios registros en un solo INSERT en SQL?

En este tutorial, aprenderá cómo insertar varias filas en una tabla utilizando una sola instrucción INSERT de SQL Server.

Ver artículo completo
¿Cómo buscar una subcadena en una cadena en SQL Server con la función CHARINDEX?

¿Cómo buscar una subcadena en una cadena en SQL Server con la función CHARINDEX?

En este tutorial, aprenderá a usar la función CHARINDEX() de SQL Server para buscar una subcadena en una cadena.

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
;