Table Variables e Transactions
Hoje um amigo perguntou sobre o conceito de transações no SQL Server,
Ele queria fazer o seguinte, chamar um processo para fazer alguns cálculos, depois gravar o resultado disso em uma tabela, e depois efetuar um rollback, pois o processo seria de simulação.
A dúvida era que quando ele efetuava um rollback o SQL fazia um rollback de tudo, inclusive no insert que ele havia feito para pegar o resultado da simulação.
Ou seja, ele queria guardar o valor da simulação em uma tabela para exibir na tela.
Mesmo não concordando muito com a lógica aplicada, sugeri para ele usar uma variável de tabela para guardar o resultado, já que ela não faz parte do escopo de uma transação portanto não afetada pelo rollback.
Por ex:
BEGIN TRAN
DECLARE @TMP TABLE (LETRA CHAR(2))
INSERT INTO @TMP(LETRA)
VALUES(‘EU’)
ROLLBACK TRAN
SELECT LETRA + ‘ ‘ + ‘CONTINUO AQUI!’ FROM @TMP
Uma outra solução seria usar SavePoints, mas também não acho que seria legal, maasss fica a dica sobre as variáveis do tipo table.
Fabiano, usando ou não o begin tran – rollback, dá no mesmo. Por isso, não sei porque ele quer fazer isso.
Abraços
Ele quer fazer um processo e depois cancelar, mas mesmo cancelando o que ele fez, ele quer guardar o resultado para exibir como se o usuário estivesse feito uma simulação…Por isso ele usa o Begin tran, faz o processo, e volta tudo ao normal… mas pegando o resultado na tabela variavel.
Entendi, meio louco mas entendi.
Abraços