Transações em SQL Server são um conjunto de procedimentos que são executados 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;
CLIQUE NA IMAGEM ABAIXO E SAIBA MAIS DETALHES:
Dúvidas ou sugestões? Deixem nos comentários! Para mais dicas, acesse o nosso canal no YouTube:
https://youtube.com/criandobits
Quer receber GRÁTIS o e-book "Como Formatar um Computador em 5 Minutos"?
Sobre o Autor
0 Comentários