CriandoBits
Identifique-se Entrar Esqueceu a senha? Esqueci minha senha

SQL Server - Transações

Por Benedito Silva Júnior - publicado em 26/07/2016


Transação é um conjunto de procedimentos que é executado num banco de dados, que para o usuário é visto como uma única ação. Ou seja, deve garantir a Atomicidade (Ou executa todos os passos corretamente ou não executa em caso de falha em algum dos passos).

O SQL Server fornece três maneira de tratar transações, que são: Transações de autoconfirmação, Transações explícitas e Transações implícitas.

Transações de autoconfirmação

Nas transações de autoconfirmação, cada instrução é uma transação por si só. Quando uma instrução produz um erro, automaticamente a instrução é revertida, senão ela é confirmada.

Por padrão o SQL Server trabalha de forma nativa com as Transações de Autoconfirmação, onde qualquer instrução T-SQL é considerada uma transação e, após sua execução, o SQL Server realiza automaticamente a confirmação desta instrução. Isso representa que, a partir desse momento, qualquer linha de comando ou instrução encaminhada ao SQL Server será reconhecida, analisada, processada e confirmada. Veja:

CREATE TABLE OPCOES ( ID INT NOT NULL PRIMARY KEY, COR VARCHAR(20) NOT NULL, NOME VARCHAR(20) NULL); ... INSERT INTO OBJETO VALUES (1, 'Rosa', 'Jaqueline'); INSERT INTO OBJETO VALUES (2, 'Azul', 'Júnior'); INSERT INTO OBJETO VALUES (3, null, 'Vanessa');

No exemplo acima o campo 'COR' não aceita valor NULL. Isso irá gerar um aviso de erro, no entanto as outras duas instruções serão processadas normalmente.

Transações explícitas

Nesse tipo de transação o desenvolvedor define onde a transação é inicializada e onde ela é finalizada ou revertida. As instruções utilizadas são: BEGIN TRANSACTION (para iniciar uma transação), COMMIT TRANSACTION (para confirmar uma transação) e ROLLBACK TRANSACTION (para reverter uma transação). Veja:

BEGIN TRY BEGIN TRAN INSERT INTO OBJETO VALUES (1, 'Rosa', 'Jaqueline'); INSERT INTO OBJETO VALUES (2, 'Azul', 'Júnior'); INSERT INTO OBJETO VALUES (3, null, 'Vanessa'); COMMIT TRAN; END TRY BEGIN CATCH SELECT ERROR_NUMBER() AS "ERROR_NUMBER", ERROR_SEVERITY() AS "ERROR_SEVERITY", ERROR_STATE() AS "ERROR_STATE", ERROR_PROCEDURE() AS "ERROR_PROCEDURE", ERROR_LINE() AS "ERROR_LINE", ERROR_MESSAGE() AS "ERROR_MESSAGE" RAISERROR('Erro na transação', 14, 1) ROLLBACK TRAN; END CATCH;

No código anterior foi usado uma rotina de tratamento de erro TRY e CATCH para verificar erro em alguma instrução. A rotina anterior não incluiu nenhum registro na tabela OPCOES porque não é permitido valor NULL, ou seja, a reversão da instrução foi executada com sucesso. Para melhorar o tratamento de erro o CATCH foi adicionado para trazer informações sobre o erro e uma mensagem de erro.

Transações implícitas

Transações implícitas são transações que ocorrem automaticamente quando enviamos os comandos INSERT, UPDATE e DELETE para o banco de dados. Estas transações são chamadas de implícitas porque não precisamos indicar o início através de um comando BEGIN TRANSACTION ou um término através do comando COMMIT ou ROLLBACK.

Para usar esse tipo de transação precisamos ativa-la no SQL Server usando o código:

SET IMPLICIT_TRANSACTIONS ON;

Verificar quantas transações em aberto existem:

SELECT @@TRANCOUNT

Crie uma tabela de teste:

CREATE TABLE TESTE (ID INT PRIMARY KEY); SELECT @@TRANCOUNT;

Execute um comando INSERT simples, execute um SELECT e verifique quantas transações em aberto existem:

INSERT INTO TESTE VALUES (5); SELECT * FROM TESTE; SELECT @@TRANCOUNT;

Execute um ROOLBACK para reverter tudo, desde o INSERT até a criação da tabela:

ROLLBACK TRAN; SELECT @@TRANCOUNT;

E para finalizar, desative as transações implícitas:

SET IMPLICIT_TRANSACTIONS OFF;


 
VoltarTopo