Published on

December 18, 2019

Compreendendo a instrução Rollback SQL no SQL Server

No SQL Server, transações são usadas para executar um grupo de instruções SQL. Com transações, todas as instruções em um grupo são executadas ou nenhuma delas é executada. No entanto, pode haver situações em que você precisa reverter manualmente uma transação com base em certas condições. É aí que entra a instrução Rollback SQL.

Vamos começar criando um conjunto de dados fictício para praticar. Vamos criar um banco de dados fictício chamado BookStore com uma tabela chamada Books. A tabela Books tem quatro colunas: id, name, category e price.

CREATE DATABASE BookStore;
GO

USE BookStore;

CREATE TABLE Books (
    id INT,
    name VARCHAR(50) NOT NULL,
    category VARCHAR(50) NOT NULL,
    price INT NOT NULL
);

INSERT INTO Books VALUES
    (1, 'Livro1', 'Cat1', 1800),
    (2, 'Livro2', 'Cat2', 1500),
    (3, 'Livro3', 'Cat3', 2000),
    (4, 'Livro4', 'Cat4', 1300),
    (5, 'Livro5', 'Cat5', 1500),
    (6, 'Livro6', 'Cat6', 5000),
    (7, 'Livro7', 'Cat7', 8000),
    (8, 'Livro8', 'Cat8', 5000),
    (9, 'Livro9', 'Cat9', 5400),
    (10, 'Livro10', 'Cat10', 3200);

Agora, vamos analisar um exemplo em que a execução de várias consultas sem o uso de transações pode levar a problemas. Considere o seguinte script:

INSERT INTO Books VALUES (15, 'Livro15', 'Cat5', 2000);
UPDATE Books SET price = '25 Hundred' WHERE id = 15;
DELETE FROM Books WHERE id = 15;

No script acima, executamos três consultas. A primeira consulta insere um novo registro na tabela Books, a segunda consulta atualiza o preço de um livro e a terceira consulta exclui um registro. No entanto, se a segunda consulta falhar, a primeira consulta ainda será executada. Isso pode levar a dados inconsistentes no banco de dados.

Para evitar esses problemas, podemos usar transações para reverter automaticamente consultas SQL. Vamos ver como as transações podem ser usadas para reverter consultas SQL:

BEGIN TRANSACTION;
INSERT INTO Books VALUES (20, 'Livro15', 'Cat5', 2000);
UPDATE Books SET price = '25 Hundred' WHERE id = 20;
DELETE FROM Books WHERE id = 20;
COMMIT TRANSACTION;

No script acima, iniciamos uma transação usando a instrução BEGIN TRANSACTION. Em seguida, executamos as mesmas três consultas SQL como antes, mas desta vez dentro de uma transação. Se alguma das consultas falhar, todas as consultas executadas anteriormente serão revertidas automaticamente.

No entanto, pode haver casos em que você deseja reverter manualmente uma transação com base em certas condições. Por exemplo, você pode querer reverter uma transação que insere um registro se um registro com o mesmo nome já existir. Nesses casos, você pode usar a instrução rollback SQL. Aqui está um exemplo:

DECLARE @BookCount INT;

BEGIN TRANSACTION AddBook;
INSERT INTO Books VALUES (20, 'Livro15', 'Cat5', 2000);
SELECT @BookCount = COUNT(*) FROM Books WHERE name = 'Livro15';

IF @BookCount > 1
BEGIN
    ROLLBACK TRANSACTION AddBook;
    PRINT 'Já existe um livro com o mesmo nome';
END
ELSE
BEGIN
    COMMIT TRANSACTION AddBook;
    PRINT 'Novo livro adicionado com sucesso';
END

No script acima, declaramos uma variável @BookCount e criamos uma transação nomeada chamada AddBook. Dentro da transação, inserimos um registro de livro e depois verificamos se um livro com o mesmo nome já existe. Se existir, reverteremos manualmente a transação usando a instrução rollback SQL. Caso contrário, confirmamos a transação.

Ao entender como usar transações e a instrução rollback SQL, você pode garantir a consistência dos dados e lidar com erros de forma eficaz no SQL Server.

Conclusão:

Neste artigo, discutimos a instrução rollback SQL no SQL Server. Aprendemos como as transações podem ser usadas para reverter automaticamente consultas SQL e como reverter manualmente uma transação com base em certas condições. Usando transações e a instrução rollback SQL, você pode manter a integridade dos dados e lidar com erros de forma eficiente em seu banco de dados do SQL Server.

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.