O comando SAVE TRANSACTION permite criar savepoints dentro de uma transação. Estes “marcadores” permitem recuperar alterações dentro de uma transação para o ponto onde o savepoint foi criado, porém o savepoint precisa de comandos SQL subseqüentes e de comandos ROLLBACK ou COMMIT para seu cancelamento ou consolidação.
Observe o seguinte exemplo:
CREATE TABLE TELEFONE(
CODIGO INT,
DDD NVARCHAR(3),
TELEFONE NVARCHAR(15)
)
BEGIN TRAN
SAVE TRANSACTION PRIMEIRO
INSERT INTO TELEFONE VALUES (1,'11','123456')
BEGIN TRAN
SAVE TRANSACTION SEGUNDO
UPDATE TELEFONE SET TELEFONE='-1'
WHERE CODIGO=1
AND TELEFONE='123456'
Veja que os savepoints são criados antes dos comando DML, demarcando o momento do banco de dados para onde podemos voltar. Agora, execute o seguinte comando:
SELECT * FROM TELEFONE
WHERE CODIGO=1
O resultado deve ser uma linha com o código igual a 1, ddd igual a 11 e o telefone igual a -1. Agora execute os seguintes comandos:
ROLLBACK TRANSACTION SEGUNDO
SELECT * FROM TELEFONE
WHERE CODIGO=1
Observe que o resultado é novamente uma linha, porem com o número 123456, inserido no comando anterior. Agora faça um select na função @@TRANCOUNT , (SELECT @@TRANCOUNT) e veja que temos duas transações ativas. O comando ROLLBACK TRANSACTION <SAVEPOINT> apenas recupera o ponto marcado, porém não finaliza transações. Para finalizar as transações abertas, temos que usar o COMMIT ou ROLLBACK, sem referência ao nome do savepoint.
Se executarmos o comando COMMIT duas vezes neste ponto do exemplo, o resultado será a consolidação do registro com CODIGO igual 1, DDD igual a 11 e TELEFONE igual a 123456.
Até a próxima!
Nenhum comentário:
Postar um comentário
Leave your comment here!