Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Duvida sobre o Begin

Ao executarmos o BIGIN ele começa a gravar todas as transações do banco? Exemplo, se após executar o BIGIN e depois eu fizer o ROLLBACK em um banco a todo vapor fazendo atualizações a todo instante ele vai desfazer apenas as minhas alteações ou vai desfazer tudo?

1 resposta
solução!

Bom dia Filipe,

BEGIN TRANSACTION inicia uma transação local para a conexão que emite a instrução. Dependendo das configurações de nível de isolamento da transação atual, muitos recursos adquiridos para aceitar as instruções Transact-SQL emitidas pela conexão são fechados pela transação, até que seja completada com uma instrução COMMIT TRANSACTION ou ROLLBACK TRANSACTION. Transações pendentes por longos períodos de tempo podem impedir outros usuários de acessar estes recursos bloqueados e também podem prevenir a operação de truncar o log.

Da uma olhada nesse documento da própria microsoft https://learn.microsoft.com/pt-br/sql/t-sql/language-elements/begin-transaction-transact-sql?view=sql-server-ver16.

Também montei um exemplo simulando duas conexões com o banco:

Query 1:

-- Cria uma tabela de teste
CREATE TABLE Teste (id INT);  

-- Inicia transação
BEGIN TRANSACTION;  
       INSERT INTO Teste VALUES(1);  
       INSERT INTO Teste VALUES(2);
-- desfaz as alterações
--ROLLBACK;  

SELECT * FROM Teste

Se comentar o ROLLBACK e abrir uma nova consulta pelo SQL(nova query), ao inserir um terceiro registro: Query2:

INSERT INTO ValueTable VALUES(3);

Após isso voltar para a query 1 e executar o ROLLBACK, vai perceber que o valor 3 inserido por outra conexão permaneceu.

Espero ter ajudado.

Rafael